N,Q=map(int,input().split()) WIN=[] LOSE=[] for i in range(1,N,2): print("?",i,N,i+1,N,flush=True) ans=int(input()) if ans==0: WIN.append(i) LOSE.append(i+1) else: WIN.append(i+1) LOSE.append(i) while len(WIN)>1: x=WIN.pop() y=WIN.pop() print("?",x,N,y,N,flush=True) ans=int(input()) if ans==0: WIN.append(x) else: WIN.append(y) while len(LOSE)>1: x=LOSE.pop() y=LOSE.pop() print("?",x,N,y,N,flush=True) ans=int(input()) if ans==1: LOSE.append(x) else: LOSE.append(y) print("!",LOSE[0],LOSE[0],WIN[0],N,flush=True)