#define LOCAL09
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define debug(msg) cout << (msg) << endl
#define FOR(i, a, b) for (int i=a; i<=(b); i++)
#define ROF(i, a, b) for (int i=a; i>=(b); i--)
#define pb(x) push_back(x) 
#define ALL(x) x.begin(), x.end()
#define RALL(x) x.rbegin(), x.rend()
#define sz(x) (ll)x.size()
#define JUDGE(x) if(x) cout << "YES\n"; else cout << "NO\n";
using namespace std;
typedef long long ll;
const ll mod = 1e8+7;
const int maxn = 20;
ll x[2000], y[2000];
int main()
{
	#ifdef LOCAL
		freopen("in.txt", "r", stdin);
    	freopen("out.txt", "w", stdout);
	#endif
	int T = 1;
	// cin >> T;
	while(T--){
		int n;
		cin >> n;
		int pos, t=-1;
		cout << "? 1 " << n << endl;
		cin >> pos;
		if(pos!=1){
			cout << "? 1 " << pos << endl;
		cin >> t;
		}
		
		if(t!=-1 && t==pos){
			int l = 1, r = pos;
			while(r-l>1){
				int mid = (l+r)>>1;
				cout << "? " << mid << " " << pos << endl;
				cin >> t;
				if(t==pos) l = mid;
				else r = mid;
			}
			cout << "! " << l << endl;
		}
		else{
			int l = pos, r = n;
			while(r-l>1){
				int mid = (l+r)>>1;
				cout << "? " << pos << " " << mid << endl;
				cin >> t;
				if(t==pos) r = mid;
				else l = mid;
			}
			cout << "! " << r << endl;
		}
	}
    return 0;
}