#include<algorithm>
#include<iostream>
#include<vector>
#include<array>
#include<queue>
#include<map>
#include<set>
using namespace std;
//思路:先查询(1,1)和(1,m),可以确定一个
//可能的点(x1,y1)再查询(x1,y1)如果给出0(x1,y1)
//就是答案否则再查询(n,1),和(1,1)可以确定
//一个答案(x2,y2);(x2,y2)就是答案
#define ll long long
ll n,m,k,q;
int cnt;
int ask(int x,int y){
cout<<"? "<<x<<" "<<y<<"\n";
cout.flush();
cin>>q;
return q;
}
void solve(){
cin>>n>>m;
int cur1=ask(1,1);
int cur2=ask(1,m);
int x1=(cur1+cur2+1-m)/2,y1=cur1-x1;
x1++;
y1++;
if(x1>0&&y1>0&&ask(x1,y1)==0){
cout<<"! "<<x1<<" "<<y1<<"\n";
}else{
int cur3=ask(n,1);
int y2=(cur1+cur3+1-n)/2,x2=cur1-y2;
x2++;
y2++;
cout<<"! "<<x2<<" "<<y2<<"\n";
}
cout.flush();
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t=1;
cin>>t;
while(t--)solve();
cout.flush();
system("pause");
return 0;
}