import collections,sys,math,functools,operator,itertools,bisect,heapq,decimal,string,time,random #sys.setrecursionlimit(10**9) #sys.set_int_max_str_digits(0) #input = sys.stdin.readline #n = int(input()) #alist = list(map(int,input().split())) #alist = [] #s = input() h,w = map(int,input().split()) if h == 1 and w == 1: print('!',1,1,flush=True) exit() if h == 1: print('?',1,1,flush=True) d = int(input()) for y in range(1,w+1): if (1-y)**2 == d: print('!',1,y) exit() if w == 1: print('?',1,1,flush=True) d = int(input()) for y in range(1,h+1): if (1-y)**2 == d: print('!',y,1) exit() print('?',1,1,flush=True) d1 = int(input()) print('?',h,w,flush=True) d2 = int(input()) for i in range(1,h+1): for j in range(1,w+1): if (i-1)**2 + (j-1)**2 == d1 and (i-h)**2 + (j-w)**2 == d2: exit(print('!',i,j,flush=True)) exit() #for i in range(n): # alist.append(list(map(int,input().split()))) print('?',1,1,flush=True) d1 = int(input()) print('?',1,w,flush=True) d2 = int(input()) y = -1 for i in range(1,w+1): if (1 - i)**2 - (w - i)**2 == d1 - d2: y = i break print('?',h,1,flush=True) d3 = int(input()) x = -1 for i in range(1,h+1): if (1 - i)**2 - (h - i)**2 == d1 - d3: x = i break print('!',x,y,flush=True)