#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#define max(a,b) (a > b ? a : b)
#define min(a,b) (a < b ? a : b)
#define N 202020
using namespace std;
int t,k,n;
int bit[N];
int dp[N];
int get_sum(int i){
    int ans=0;
    while(i>0){
        ans+=bit[i];
        i-=i&(-i);
    }
    return ans;
}
void add(int i){
    while(i<=n){
        bit[i]++;
        i+=i&(-i);
    }
}
int ask(int l,int r){

    if(dp[r]>=0) return dp[r];

    int sum;
    printf("? %d %d\n",l,r);
    fflush(stdout);
    scanf("%d",&sum);
    dp[r]=sum-get_sum(r);
    return dp[r];
}
void an(int x){
    printf("! %d\n",x);
    fflush(stdout);
}
int main()
{
   memset(dp,-1,sizeof(dp));
   cin>>n>>t;
   while(t--)
   {
       cin>>k;
       int l=0,r=n;
       while(r-l>1){
        int mid=(l+r)>>1;
        int sum=ask(1,mid);
        int z0=mid-sum-get_sum(mid);
        if(z0<k) l=mid;
        else     r=mid;
       }
       add(r);
       an(r);
   }
    return 0;
}
