#!/usr/bin/env python3
import functools


@functools.lru_cache(None)
def query(xy): return int(input(f"? {xy[0]} {xy[1]}\n")) if all(0 < i <= n for i in xy) else 0


low, high = [1, (n := int(input())) + 1]  # Lower bound is inclusive, upper bound is exclusive
while True:
    mid = (low + high) // 2
    x, y = max(((xx, mid) for xx in range(1, n + 1)), key=query)
    best = max(((x, yy) for yy in range(y - 1, y + 2)), key=query)
    if best[1] == mid: print("!", query(best)), exit()
    low, high = [low, mid] if best[1] < mid else [mid + 1, high]
