///
/// Header; mostly generic
///
#include <cassert>
#include <ctime>
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;
typedef long long ll;
const bool debug = true; // Print debugging messages with err or debug
const bool numTestsGiven = false; // If true, reads number of tests in first line
#define err(...) if (debug) fprintf(stderr,__VA_ARGS__)
#define debug(exp) if (debug) cerr << #exp << " = " << (exp) << " "
#define myscanf(exp, num, ...) if (scanf(exp,__VA_ARGS__) != num) return false;

///
/// Testcase variables
///
const int maxn = 200000;
int n,t;
int fenwick[maxn+1];
///
/// Solution
///

// Gets the sum of all array elements whose indices' bit expansions begin with i's
int queryFenwick(int i) {
    if (i > n) return 0;
    assert(i >= 1);
    if (fenwick[i] == -1) {
        int numOnes;
        int j = min(n+1,i + (i&-i));
        printf("? %d %d\n",i, j-1); fflush(stdout);
        scanf("%d",&numOnes);
        if (numOnes == -1) exit(0);
        int numZeros = j-i-numOnes;
        fenwick[i] = numZeros;
    }
    return fenwick[i];
}

void decrement(int loc) {
    assert(loc >=1 && loc <= n);
    while (loc > 0) {
        fenwick[loc]--;
        loc -= loc&-loc;
    }
}


//Find index of the kth zero, starting at loc
int findIndex(int loc, int k) {
    while (queryFenwick(loc) < k) {
        k -= queryFenwick(loc);
        loc += (loc&-loc);
    }
    int zeros = queryFenwick(loc);
    //Loop invariant: in interval [loc, loc + placeVal), there are "zeros" zeros, and we want the kth one
    int placeVal = loc&-loc;
    //debug(loc); debug(placeVal); debug(zeros); debug(k); err("\n");

    while (placeVal > 1) {
        placeVal >>= 1;
        int zerosAbove = queryFenwick(loc+placeVal);
        //debug(placeVal); debug(zerosAbove); err("\n");
        if (zeros - zerosAbove < k) {
            loc += placeVal;
            k -= (zeros-zerosAbove);
            zeros = zerosAbove;
        } else {
            zeros -= zerosAbove;
        }
        //debug(loc); debug(placeVal); debug(zeros); debug(k); err("\n");
    }
    assert(zeros == 1);
    return loc;
}

void solve_testcase() {
    fill(fenwick+1,fenwick+n+1,-1); // Means not yet queried
    for (int i=0; i<t; i++) {
        int k; scanf("%d",&k);
        int pos = findIndex(1,k);
        printf("! %d\n",pos); fflush(stdout);
        decrement(pos);
    }
}

bool read_testcase() {
    cin >> n >> t;
    return cin.good();
}

///
/// Generic I/O code (not problem-specific)
///

int main(int argc, char **argv) {
    read_testcase();
    solve_testcase();
}
