#include <bits/stdc++.h>
using namespace std;
const long long MX = 2e5;
long long dp[MX];
bool used[MX];
long long ask(long long x) {
  if (used[x]) {
    return dp[x];
  }
  used[x] = true;
  cout << "? " << x << endl;
  long long ans;
  cin >> ans;
  return dp[x] = ans;
}
void answer(long long x) { cout << "! " << x << endl; }
long long n;
long long opposite(long long x) { return x + n / 2; }
long long getDif(long long x) {
  assert(x <= n / 2);
  long long l = ask(x);
  long long r = ask(opposite(x));
  return l - r;
}
bool sameSign(long long x, long long y) {
  if (x > 0 && y > 0) return true;
  if (x < 0 && y < 0) return true;
  return false;
}
int main() {
  cin >> n;
  long long l = 1;
  long long r = opposite(1);
  long long dif = getDif(l);
  if (dif == 0) {
    answer(l);
    return 0;
  }
  if (abs(dif) % 2) {
    answer(-1);
    return 0;
  }
  while (true) {
    long long mid = (l + r) / 2;
    dif = getDif(mid);
    if (dif == 0) {
      answer(mid);
      break;
    }
    if (!sameSign(dif, getDif(l))) {
      r = mid;
    } else {
      l = mid;
    }
  }
  return 0;
}
