
#include <bits/stdc++.h>
 
#ifdef NON_SUBMIT
#define TEST(n) (n)
#define tout cerr
#else
#define TEST(n) ((void)0)
#define tout cin
#endif
 
using namespace std;
 
int N, tree[1<<19];
 
int solve(int k, int bit=1, int s=1, int e=N)
{
	int m=(s+e)>>1;
	if(s==e) return m;
	if(tree[bit]==-1) {
		cout<<"? "<<s<<' '<<m<<endl;
		cin>>tree[bit]; tree[bit]=m+1-s-tree[bit];
	}
	if(tree[bit]>=k) {
		tree[bit]--;
		return solve(k,2*bit,s,m);
	}
	return solve(k-tree[bit],2*bit+1,m+1,e);
}
 
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	TEST(freopen("input.txt","r",stdin));
	TEST(freopen("output.txt","w",stdout));
	TEST(freopen("debug.txt","w",stderr));
	int K, T; memset(tree,-1,sizeof(tree));
	for(cin>>N>>T;T--;) {
		int res;
		cin>>K; res=solve(K);
		cout<<"! "<<res<<endl;
	}
	return 0;
}