N, Q = map(int, input().split()) A = list(range(1, N+1)) lose = [] flag = True while 2 <= len(A): B = [] for i in range(len(A)//2): print("?", A[i*2], A[i*2], A[i*2+1], A[i*2+1]) X = int(input()) if X == 1: B.append(A[i*2]) if flag: lose.append(A[i*2+1]) else: B.append(A[i*2+1]) if flag: lose.append(A[i*2]) A = B[:] flag = False minL, minR = A[0], A[0] MAX = lose[0] for l in lose[1:]: print("?", MAX, N, l, N) X = int(input()) if X == 1: MAX = l maxL, maxR = MAX, N print("!", minL, minR, maxL, maxR)