#include<bits/stdc++.h>   using namespace std;      int n;   inline int lst(int i){return i==1?n:i-1;}   inline int nxt(int i){return i==n?1:i+1;}   inline int lst(int i,int d){return (((i-d-1)%n+n)%n+1);}   inline int nxt(int i,int d){return ((i+d-1)%n+1);}      inline int getval(){    fflush(stdout);    int val;    scanf( %d ,&val);    return val;   }   inline int curval(int i){    printf( ? %d n n ,i);    return getval();   }   inline int lstval(int i){    printf( ? %d n n ,lst(i));    return getval();   }   inline int nxtval(int i){    printf( ? %d n n ,nxt(i));    return getval();   }      int k;   int a[200],b[200];      inline void ansis(int ans)   {    printf( ! %d n ,ans);    exit(0);   }   inline void findit(int pos,int val,int len)   {    if (val>k){     int lef=1,rig=len,mid;     while (lef<=rig){      mid=((lef+rig)>>1);      int curpos=lst(pos,mid);      int cur=curval(curpos);      if (cur==k) ansis(curpos);      if (cur>k) lef=mid+1; else rig=mid-1;     }    }else{     int lef=1,rig=len,mid;     while (lef<=rig){      mid=((lef+rig)>>1);      int curpos=nxt(pos,mid);      int cur=curval(curpos);      if (cur==k) ansis(curpos);      if (cur<k) lef=mid+1; else rig=mid-1;     }    }   }   int main()   {    scanf( %d%d ,&n,&k);    curval(1);    int pos=1;    for (int t=1;t<=950;t+=2){     int val1=curval(pos);     if (val1!=k) {      findit(pos,val1,t);      return 0;     }     int val2=nxtval(pos);     if (val2!=k) {      findit(nxt(pos),val2,t+1);      return 0;     }     pos=nxt(pos,t*2+1);    }   }    