#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
#define pb push_back
#define pob pop_back
#define psf push_front
#define pof pop_front

int n;
const int NAX = 200001;
int fen[NAX];
int szblock, szarr;
vector<int> blockarr;
bool firstque=true;

void update(int pos, int delta){
	while(pos < szarr+3){
		fen[pos] += delta;
		pos += pos&(-pos);
	}
}

int query(int pos){
	int counter = 0;
	while(pos>0){
		counter += fen[pos];
		pos -= pos&(-pos);
	}
	return counter;
}

int qzeros(int l, int r){
	l++, r++;
	cout<<"? "<<l<<' '<<r<<endl;
	int qans; cin>>qans;
	return r-l+1 - qans;
}

void printans(int pos){
	cout<<"! "<<pos<<endl;
}

void pre(){
	blockarr.clear();
	szblock = min(20,n);
	int N = n - 1;
	szarr = N/szblock;
	for (int i=0; i<=szarr; i++){
		int l = i*szblock;
		int r = l+szblock-1;
		r = min(r,N);
		blockarr.push_back(qzeros(l,r));
	}
	blockarr.insert(blockarr.begin(), 1, 0);
	for (int i=1; i<=szarr+1; i++){
		update(i,blockarr[i]);
	}
}

void f1(int k, int numblock){
	//cout<<"k = "<<k<<endl;
	int l = numblock * szblock;
	int r = l + szblock - 1;
	l++, r++;
	r = min(r,n);
	int lo = l, hi = r+1;
	while(lo+1 != hi){
		int mid = (lo+hi)/2;
		int qq = qzeros(l-1, mid-1);
		if (qq < k) lo=mid;
		else hi=mid;
	}
	if (lo == l && k == 1){
		int ishere = qzeros(l-1, l-1);
		if (ishere == 1){
			printans(l);
			return;
		}
	}
	printans(lo+1);
}

void solve(){
	int k; cin>>k;
	if (firstque){
		pre();
		firstque = false;
	}
	int lo = 0, hi = szarr+2;
	while(lo+1 != hi){
		int mid = (lo+hi)/2;
		int qq = query(mid);
		if (qq < k) lo=mid;
		else hi=mid;
	}
	int currbl = lo+1;
	int lastpref = query(lo);
	int sch = k - lastpref;	
	f1(sch, currbl-1);
	update(currbl, -1);
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int t; cin>>n>>t;
	while(t--) solve();
	
	return 0;
}
// NK
