//#ifdef NACHIA //#define _GLIBCXX_DEBUG //#else //#define NDEBUG //#endif #include #include #include #include using i64 = long long; using u64 = unsigned long long; #define rep(i,n) for(int i=0; i void chmin(A& l, const A& r){ if(r < l) l = r; } template void chmax(A& l, const A& r){ if(l < r) l = r; } using namespace std; #include using Modint = atcoder::static_modint<998244353>; void testcase(){ int N; cin >> N; int Q; cin >> Q; vector A(N); rep(i,N) A[i] = i; auto ans = minmax_element(A.begin(), A.end(), [&](int l, int r){ cout << "? " << (l+1) << " " << N << " " << (r+1) << " " << N << endl; int res; cin >> res; if(res == -1) exit(0); return res == 1; }); int u = ans.first - A.begin(); int v = ans.second - A.begin(); cout << "! " << (u+1) << " " << (u+1) << " " << (v+1) << " " << N << endl; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); testcase(); return 0; }