using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, q) = (c[0], c[1]); var r = new Random(); var order = new List(); for (var i = 0; i < n; ++i) order.Add(i + 1); for (var i = n - 2; i >= 0; --i) { var pos = r.Next(i, n); (order[i], order[pos]) = (order[pos], order[i]); } var minlist = new List(); var max = order[0]; for (var i = 1; i < n; ++i) { var m2 = order[i]; WriteLine($"? {max} {n} {m2} {n}"); var x = NN; if (x == 1) { minlist.Add(max); max = m2; } else if (x == 0) { minlist.Add(m2); } else { return; } } var min = order[0]; for (var i = 1; i < order.Count; ++i) { var m2 = order[i]; WriteLine($"? {min} {n} {m2} {n}"); var x = NN; if (x == 0) { min = m2; } else if (x != 1) { return; } } WriteLine($"! {min} {min} {max} {n}"); } }