func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename A, size_t N, typename T>   void Fill(A (&array)[N], const T &val) {     std::fill((T *)array, (T *)(array + N), val);   }   template <class T>   inline bool chmax(T &a, T b) {     if (a < b) {       a = b;       return true;     }     return false;   }   template <class T>   inline bool chmin(T &a, T b) {     if (a > b) {       a = b;       return true;     }     return false;   }   int mi = 1000000007;   map<pair<int, int>, int> mp;   int minima[2000000];   int f(int a, int b) {     if (mp.find(make_pair(a, b)) != mp.end()) {       return mp[make_pair(a, b)];     }     cout <<  ?   << a <<     << b << endl;     int s;     cin >> s;     chmin(mi, s);     return mp[make_pair(a, b)] = s;   }   void SMAWK(vector<int> js, int ib, int ie, int id) {     if (ib > ie) return;     vector<int> js2;     for (int q = 0, i = ib; q < js.size(); ++q) {       while (!js2.empty() && f(i, js2.back()) >= f(i, js[q])) {         js2.pop_back();         i -= id;       }       if (js2.size() != (ie - ib) / id) {         js2.push_back(js[q]);         i += id;       }     }     SMAWK(js2, ib + id, ie, id * 2);     for (int i = ib, q = 0; i <= ie; i += id * 2) {       int jt = (i + id <= ie ? minima[i + id] : js.back());       int fm = 999999999 * 2, fq;       for (; q < js.size(); ++q) {         if (fm > (fq = f(i, js[q]))) {           fm = fq;           minima[i] = js[q];         }         if (js[q] == jt) break;       }     }   }   void rowMinimaTM(int ib, int ie, int jb, int je) {     vector<int> js;     for (int j = jb; j <= je; ++j) js.push_back(j);     SMAWK(js, ib, ie, 1);   }   int main() {     int n, m;     cin >> n >> m;     rowMinimaTM(1, n, 1, m);     cout <<  !   << mi << endl;     return 0;   }   