#include using namespace std; int N, Q; int query(int l, int r, int L, int R) { cout << "? " << l << " " << r << " " << L << " " << R << endl; int X; cin >> X; return X; } void answer(int l, int r, int L, int R) { cout << "! " << l << " " << r << " " << L << " " << R << endl; } class Index { public: int l; Index(int l) : l(l) {} bool operator < (const Index& other) { int X = query(this->l, N, other.l, N); return X == 1; } bool operator >= (const Index& other) { int X = query(this->l, N, other.l, N); return X == 0; } }; int main() { cin >> N >> Q; vector indexes; for (int i = 1; i <= N; i++) { indexes.push_back(Index(i)); } auto [min_idx, max_idx] = minmax_element(indexes.begin(), indexes.end()); answer(min_idx->l, min_idx->l, max_idx->l, N); }