#include <bits/stdc++.h>
using namespace std;
int read_number(int i) {
  cout << "? " << i << '\n';
  fflush(stdout);
  int number;
  cin >> number;
  return number;
}
bool intersects(int l1, int l2, int r1, int r2) {
  if (l1 >= l2) swap(l1, l2);
  if (r1 >= r2) swap(r2, r1);
  return max(l1, r1) <= min(l2, r2);
}
bool contains(int l1, int l2, int r1, int r2) {
  if (l1 >= l2) swap(l1, l2);
  if (r1 >= r2) swap(r1, r2);
  return (l1 <= r1 && l2 >= r2) || (r1 <= l1 && l2 <= r2);
}
bool dif(int l1, int l2, int r1, int r2) { return (l2 - l1) * (r2 - r1) <= 0; }
bool solution(int l1, int l2, int r1, int r2) {
  return (dif(l1, l2, r1, r2) && intersects(l1, l2, r1, r2)) ||
         contains(l1, l2, r1, r2);
}
int main() {
  int n;
  cin >> n;
  if ((n / 2) % 2 == 1) {
    cout << "! -1\n";
    return 0;
  }
  int l1 = read_number(1);
  int r1 = read_number(n / 2 + 1);
  int l2 = r1;
  int r2 = l1;
  int min_l1 = 1;
  int max_l1 = n / 2 + 1;
  int min_r1 = n / 2 + 1;
  int max_r2 = n + 1;
  if (l1 == r1) {
    cout << "! " << l1 << '\n';
    return 0;
  }
  while (true) {
    int med_l1 = (1 + min_l1 + max_l1) / 2;
    int med_r2 = (1 + min_r1 + max_r2) / 2;
    int temp_l1 = read_number(med_l1);
    int temp_r1 = read_number(med_r2);
    if (temp_l1 == temp_r1) {
      cout << "! " << med_l1 << '\n';
      return 0;
    }
    if (solution(l1, temp_l1, r1, temp_r1)) {
      l2 = temp_l1;
      r2 = temp_r1;
      max_l1 = med_l1;
      max_r2 = med_r2;
    } else {
      l1 = temp_l1;
      r1 = temp_r1;
      min_l1 = med_l1;
      min_r1 = med_r2;
    }
  }
  return 0;
}
