H, W = map(int, input().split())

if (H, W) == (1,1):
    print(f'! {1} {1}', flush=True)
    exit()

print(f'? {1} {1}', flush=True)

d = int(input())
possible = []
for i in range(1, H+1):
    for j in range(1, W+1):
        if (i-1)**2 + (j-1)**2 == d:
            possible.append((i, j))

if len(possible) == 1:
    ansi, ansj = possible[0]
    print(f'! {ansi} {ansj}', flush=True)
    exit()

if H < W:
    print(f'? {1} {W}', flush=True)
    d = int(input())
    possible2 = []
    for i, j in possible:
        if (i-1)**2 + (W-j)**2 == d:
            possible2.append((i, j))
    ansi, ansj = possible2[0]
    print(f'! {ansi} {ansj}', flush=True)
    exit()

else:
    print(f'? {H} {1}', flush=True)
    d = int(input())
    possible2 = []
    for i, j in possible:
        if (H-i)**2 + (j-1)**2 == d:
            possible2.append((i, j))
    ansi, ansj = possible2[0]
    print(f'! {ansi} {ansj}', flush=True)
    exit()