#include <bits/stdc++.h>
using namespace std;
long long praeitas = 0;
long long c = 1, n = 1;
long long klausk(long long id) {
  cout << "? " << id << endl;
  long long ats;
  cin >> ats;
  praeitas = id;
  return ats;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t;
  cin >> t;
  while (t--) {
    if (c == n) {
      n++;
      c = 1;
    } else
      c++;
    cin >> n;
    if (n == 1) {
      cout << "= 1" << endl;
      continue;
    }
    long long demenys[65];
    demenys[0] = (n) / 2;
    for (long long i = 1; i <= 64; i++) {
      demenys[i] = (demenys[i - 1] + n) / 2;
    }
    long long paskutinis;
    for (long long i = 1; i <= 64; i++) {
      if (demenys[i] == demenys[i - 1]) {
        paskutinis = i - 1;
        break;
      }
    }
    if (demenys[paskutinis] == n) {
      paskutinis--;
    }
    for (long long i = 0; i <= paskutinis - i; i++) {
      swap(demenys[i], demenys[paskutinis - i]);
    }
    paskutinis++;
    long long uzklausos[65];
    uzklausos[0] = 1;
    for (long long i = 1; i <= paskutinis; i++) {
      if (i % 2 == 1)
        uzklausos[i] = uzklausos[i - 1] + demenys[i - 1];
      else
        uzklausos[i] = uzklausos[i - 1] - demenys[i - 1];
    }
    reverse(uzklausos, uzklausos + paskutinis + 1);
    map<long long, long long> naudoti;
    naudoti[uzklausos[0]] = 1;
    long long nereikalingas = klausk(uzklausos[0]);
    long long min_ats = 1, max_ats = n;
    auto tvarkyk_uzklausas = [&](long long dabartinis, long long id,
                                 bool didziausias) {
      vector<long long> skirtumai;
      long long vid = (min_ats + max_ats) / 2;
      skirtumai.push_back(vid);
      while (true) {
        vid = (skirtumai[skirtumai.size() - 1] + max_ats) / 2;
        if (vid == skirtumai[skirtumai.size() - 1]) break;
        skirtumai.push_back(vid);
      }
      for (long long i = 0; i < skirtumai.size(); i++) {
        if (didziausias) {
          uzklausos[id + 1 + i] = uzklausos[id + i] - skirtumai[i];
        } else {
          uzklausos[id + 1 + i] = uzklausos[id + i] + skirtumai[i];
        }
        didziausias = !didziausias;
      }
      paskutinis = id + (long long)skirtumai.size();
    };
    for (long long i = 1; i <= paskutinis; i++) {
      long long kitas;
      kitas = uzklausos[i];
      if (naudoti[kitas] == 1) {
        break;
      }
      long long ats;
      ats = klausk(uzklausos[i]);
      naudoti[kitas] = 1;
      if (ats == 1) {
        max_ats = min(max_ats, abs(uzklausos[i] - uzklausos[i - 1]));
        bool didz;
        if (uzklausos[i] > uzklausos[i - 1])
          didz = true;
        else
          didz = false;
        tvarkyk_uzklausas(kitas, i, didz);
      } else {
        min_ats = max(min_ats, abs(uzklausos[i] - uzklausos[i - 1]) + 1);
      }
    }
    if (min_ats != max_ats) {
      if ((naudoti[praeitas + max_ats - 1] == 0) &&
          (praeitas + max_ats - 1 <= n)) {
        long long ats = klausk(praeitas + max_ats - 1);
        if (ats == 1) {
          max_ats--;
        } else {
          min_ats = max_ats;
        }
      } else if ((naudoti[praeitas - max_ats + 1] == 0) &&
                 (praeitas - max_ats + 1 >= 1)) {
        long long ats = klausk(praeitas - max_ats + 1);
        if (ats == 1) {
          max_ats--;
        } else {
          min_ats = max_ats;
        }
      }
      while (min_ats != max_ats) uzklausos[0]++;
    }
    cout << "= " << min_ats << endl;
  }
  return 0;
}
