//#ifdef NACHIA //#define _GLIBCXX_DEBUG //#else //#define NDEBUG //#endif #include <iostream> #include <string> #include <vector> #include <algorithm> using i64 = long long; using u64 = unsigned long long; #define rep(i,n) for(int i=0; i<int(n); i++) const i64 INF = 1001001001001001001; template<typename A> void chmin(A& l, const A& r){ if(r < l) l = r; } template<typename A> void chmax(A& l, const A& r){ if(l < r) l = r; } using namespace std; #include <atcoder/modint> using Modint = atcoder::static_modint<998244353>; void testcase(){ int N; cin >> N; int Q; cin >> Q; vector<int> 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; }