#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);
	}
} 
