#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define eb emplace_back
#define mk make_pair
#define fi first
#define se second
#define mset(a, b) memset(a, b, sizeof(a))
using ll = long long;
using pii = pair<int, int>;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
template<class Ty> Ty randint(Ty a, Ty b) { return uniform_int_distribution<Ty>(a, b)(rng); }

template<class T> void DBG(T&& x) { cerr << x << " "; }
template<class T, class...Args> void DBG(T&& x, Args&&... args) { DBG(x); DBG(args...); }
#define DBG(...) { cerr << "[" << #__VA_ARGS__ << "]: "; DBG(__VA_ARGS__); cerr << endl; }
template<class num> inline void rd(num& x) { cin >> x; }
template <class Ty, class... Args> inline void rd(Ty& x, Args&... args) { rd(x); rd(args...); }
template<class num> inline void print(num&& x) { cout << x; }
template <class Ty, class... Args> inline void print(Ty&& x, Args&&... args) { print(x); print(' '); print(args...); }
#define print(...) print(__VA_ARGS__), print('\n')

int n;
int memo[112345];

int ask(int x, bool ok = false) {
	if (x == 0 || x == n + 1) return 0x3f3f3f3f;
	if (!ok && memo[x]) return memo[x];

	if (ok) cout << "! ";
	else cout << "? ";
	cout << x << endl;
	if (ok) exit(0);

	int ans; cin >> ans;
	return memo[x] = ans;
}

inline void run_test(int test_number) {
	cin >> n;
	int lo = 1, hi = n, mi;
	while(lo <= hi) {
		mi = (lo + hi) / 2;

		int a = ask(mi - 1);
		int b = ask(mi);
		int c = ask(mi + 1);

		if (a > b && b < c) ask(mi, true);
		else if (a < b && b < c) hi = mi - 1;
		else if (a < b && b > c) hi = mi - 1;
		else if (a > b && b > c) lo = mi + 1;
	}
}

int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);
	int n_tests = 1;
	for (int i = 1; i <= n_tests; i++) run_test(i);
}