#include #include #include #include namespace mp = boost::multiprecision; using Bint = mp::cpp_int; using namespace std; using namespace atcoder; #define rep(i, n) for(int i=0;i<(n);++i) #define rep1(i, n) for(int i=1;i<=(n);i++) #define ll long long using mint = modint998244353; using P = pair; using lb = long double; using T = tuple; #ifdef LOCAL # include # define dbg(...) debug_print::multi_print(#__VA_ARGS__, __VA_ARGS__) #else # define dbg(...) (static_cast(0)) #endif int ask(int i, int j) { cout << "? " << i << " " << j << endl; int d; cin >> d; return d; } int main() { int h, w; cin >> h >> w; if(h==1 && w==1) { cout << "! " << 1 << " " << 1 << endl; return 0; } if(h==1) { int d = ask(1,1); for(int y=1;y<=w;y++) { if((y-1)*(y-1)==d) { cout << "! " << 1 << " " << y << endl; return 0; } } } if(w==1) { int d = ask(1,1); for(int x=1;x<=h;x++) { if((x-1)*(x-1)==d) { cout << "! " << x << " " << 1 << endl; return 0; } } } int d1 = ask(1,w); int d2 = ask(2,w); int x = (d1-d2+3)/2; for(int y=1;y<=w;y++) { if((y-w)*(y-w)+(x-1)*(x-1)==d1) { cout << "! " << x << " " << y << endl; return 0; } } return 0; }