#include <cstdio>

int sMax;

int getMid(int p1, int p2)
{
	return p1 + ((p2 - p1) / 2);
}

int getPos(int p1, int p2)
{
	int p;
	
	printf("? %d %d\n", p1, p2);
	fflush(stdout);
	
	scanf("%d", &p);
	
	return p;
}

int binarySearch1(int p1, int p2)
{
	if(p1 == p2)
		return p1;
	
	int mid = getMid(p1, p2);
	int pos = getPos(mid + 1, sMax);
	
	if(pos == sMax)
		return binarySearch1(mid + 1, p2);
	
	else
		return binarySearch1(p1, mid);
}

int binarySearch2(int p1, int p2)
{
	if(p1 == p2)
		return p1;
	
	int mid = getMid(p1, p2);
	int pos = getPos(sMax, mid);
	
	if(pos == sMax)
		return binarySearch2(p1, mid);
	
	else
		return binarySearch2(mid + 1, p2);
}

int getSolution(int p1, int p2)
{
	int pos1;
	int pos2;
	
	pos1 = getPos(p1, p2);
	sMax = pos1;
	
	if(pos1 == p1)
		return binarySearch2(pos1 + 1, p2);
	
	if(pos2 == p2)
		return binarySearch1(p1, pos1 - 1);
	
	pos2 = getPos(p1, pos1);
	
	if(pos1 == pos2)
		return binarySearch1(p1, pos1 - 1);
	
	else
		return binarySearch2(pos1 + 1, p2);
}

int main()
{
	int n;
	
	scanf("%d", &n);
	
	printf("! %d\n", getSolution(1, n));
	
	fflush(stdout);
}