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

map<pair<int,int>, int> mp;
int query(int l, int r){
    if(l == r)
        return -1;
    if(mp.find({l, r}) != mp.end())
        return mp[{l, r}];
    cout<<"? "<<l<<" "<<r<<endl;
    int x;
    cin>>x;
    return mp[{l,r}] = x;
}

int findPos(int l, int r){
    int x = query(1, n);
    int y = query(x, n);
    int answer;
    if(y == x){
        // visit right side
        int L = x + 1;
        int R = r;

        while(L <= R){
            int mid = (L+R)/2;
            if(query(x, mid) == x){
                answer = mid;
                R = mid - 1;
            }
            else {
                L = mid + 1;
            }
        }
    }
    else {
        // visit left side
        int L = l;
        int R = x - 1;

        while(L <= R){
            int mid = (L+R)/2;
            if(query(mid, x) == x){
                answer = mid;
                L = mid + 1;
            }
            else {
                R = mid - 1;
            }
        }

    }

    return answer;
}

int main(){
    n = 0;
    cin>>n;

    int ans = findPos(1, n);
    cout<<"! "<<ans<<endl;
    //exit(0);

    return 0;
}
