#include<set>
#include<map>
#include<vector>
#include<queue>
#include<cmath>
#include<stack>
#include<bitset>
#include<iomanip>
#include<iostream>
#include<algorithm>
//#pragma GCC optimize("O0")
using namespace std;
#define int long long
#define double long double
const int maxn=3e5+10;
int arr[maxn]={0};
int sum[maxn]={0};
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int N;cin>>N;
while(N--){
int n;cin>>n;int x;int a;
for(a=1;a<n;a+=2){
cout<<"? "<<a<<" "<<a+1<<endl;
cin>>x;
cout.flush();
if(x)break;
}if(a==n){cout<<"? "<<n-1<<" "<<n<<endl;cout.flush();cin>>x;
if(x==0){cout<<"! 1"<<endl;continue;}
int t1=-1,t2=-1;cout<<"? 1 "<<n<<endl;cout.flush();cin>>t1;
cout<<"? 2 "<<n<<endl;cout.flush();cin>>t2;
if(t1&&t2)cout<<"! 2"<<endl;
else cout<<"! 1"<<endl;
continue;}
if(a==n+1){cout<<"! 1"<<endl;
continue;}
int x1=-1,x2=-1;int x3=-1,x4=-1;
for(int b=1;b<=n;b++){
if(b==a||b==a+1)continue;
cout<<"? "<<b<<" "<<a+1<<endl; cout.flush();
cin>>x1;
cout<<"? "<<b<<" "<<a<<endl; cout.flush();
cin>>x2;
if(x1==0&&x2==0){cout<<"! 1"<<endl;continue;}
for(int c=b+1;c<=n;c++){
if(c==a||c==a+1){continue;}
break;}
if(x1)cout<<"? "<<c<<" "<<a+1<<endl;
else cout<<"? "<<c<<" "<<a<<endl;
cout.flush();
cin>>x3;
if(x3)cout<<"! 2"<<endl;
else cout<<"! 1"<<endl;
break;}}
}