#!/usr/bin/python3

import sys

n = int(input())

xl = 1
xh = n
yl = 1
yh = n

highest = -1
highest_x = -1
highest_y = -1
memo = {}

def q(x, y):
    if (x, y) in memo:
        return memo[(x, y)]

    print("?", x, y)
    sys.stdout.flush()
    v = int(input())
    memo[(x, y)] = v

    global highest, highest_x, highest_y

    if v > highest:
        highest = v
        highest_x = x
        highest_y = y

    return v

while xh - xl > 2:
    xm = (xl + xh) // 2
    for y in range(yl, yh + 1):
        q(xm, y)
    q(xm - 1, highest_y)
    q(xm + 1, highest_y)
    if highest_x < xm:
        xh = xm
    elif highest_x > xm:
        xl = xm
    else:
        break

    ym = (yl + yh) // 2
    for x in range(xl, xh + 1):
        q(x, ym)
    q(highest_x, ym - 1)
    q(highest_x, ym + 1)
    if highest_y < ym:
        yh = ym
    elif highest_y > ym:
        yl = ym
    else:
        break

if xh - xl <= 2:
    for x in range(xl, xh + 1):
        for y in range(yl, yh + 1):
            q(x, y)

print("!", highest)
