import collections,random n,q = map(int,input().split()) #p = [random.randint(0,10000) for i in range(1000)] def query(a,b,c,d): print('?',a+1,b+1,c+1,d+1,flush=True) x = int(input()) #x = 1 if p[a:b+1] < p[c:d+1] else 0 return x a = collections.deque(range(n)) b = collections.deque() c = collections.deque() for i in range(n//2): x = a.popleft() y = a.popleft() z = query(x,x,y,y) if z == 1: c.append(x) b.append(y) else: c.append(y) b.append(x) a = c + a while len(a) > 1: c = collections.deque() while len(a) > 1: x = a.popleft() y = a.popleft() z = query(x,x,y,y) if z == 1: c.append(x) else: c.append(y) a = c ans = [a[0],a[0]] a = b #print(a,b) while len(a) > 1: c = collections.deque() while len(a) > 1: x = a.popleft() y = a.popleft() z = query(x,n-1,y,n-1) if z == 0: c.append(x) else: c.append(y) a = c ans.extend([a[0],n-1]) #print(ans) ans = list(map(lambda x:x+1,ans)) print('!',*ans) #1 3 4 2