def find_top(members): top = members[0] seconds = [] for m in members[1:]: print(f'? {top} {m}') res = int(input()) if res == top: seconds.append(m) else: seconds = [top] top = res return top, seconds def solve(N): n = 18 group = [[]] for i in range(1, N+1): if len(group[-1]) < n: group[-1].append(i) else: group.append([i]) res = [find_top(members) for members in group] top, seconds = res[0] tops = [] for t, ss, c in res[1:]: print(f'? {top} {t}') res = int(input()) if res == top: tops.append(t) else: tops.append(top) top = res seconds = ss ans, _= find_top(tops + seconds) return ans N = int(input()) ans = solve(N) print(f'! {ans}')