#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:167772160000")
template <typename T>
using min_heap = std::priority_queue<T, std::vector<T>, std::greater<T>>;
template <typename T>
using max_heap = std::priority_queue<T, std::vector<T>, std::less<T>>;
using namespace std;
int vals[100000 + 10];
bool know[100000 + 10];
int n;
int ask(int i) {
  if (know[i]) return vals[i];
  cout << "? " << i << endl;
  int a;
  cin >> a;
  know[i] = true;
  return vals[i] = a;
}
int f(int x) { return ask(x) - ask(x + n / 2); }
void answer(int i) {
  cout << "! " << i << endl;
  exit(0);
}
void doTry(int i) {
  if (f(i) == 0) {
    answer(i);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  if (n % 4 != 0) {
    answer(-1);
  }
  int lo = 1;
  int hi = n / 2;
  while (abs(lo - hi) > 2) {
    cerr << lo << " " << hi << endl;
    int mid = (lo + hi) / 2;
    doTry(mid);
    int valLo = f(lo);
    int valHi = f(hi);
    int valMid = f(mid);
    if (((valLo) > 1e-6 ? 1 : ((valLo) < -1e-6 ? -1 : 0)) ==
        ((valMid) > 1e-6 ? 1 : ((valMid) < -1e-6 ? -1 : 0))) {
      lo = mid;
    } else {
      hi = mid;
    }
  }
  cerr << "DONE WITH " << lo << " " << hi << endl;
  for (int i = (min(lo, hi)); i < (max(lo, hi) + 1); i++) {
    cerr << ">>> " << i << endl;
    doTry(i);
  }
  answer(-1);
  cout << "DONE";
  int x;
  cin >> x;
  return 0;
}
