// g++ -o code_forces code_forces.cpp; ./code_forces
// to run press ctrl+alt+n which will use the code runner extension to run
#include <bits/stdc++.h>
#include <chrono>
using namespace std;
#define fr(i, k) for (int i = 0; i < k; i++)
#define rfr(j, k) for (int i = k - 1; i >= 0; i--)
#define icn(i) \
    int i;     \
    cin >> i
#define llcn(i) \
    ll i;       \
    cin >> l
#define in(i, st, end) (i >= st && i < end)
#define mkp(x, y) make_pair(x, y)
#define all(a) a.begin(), a.end()
// #define endl '\n'
using ll = long long;
using ull = unsigned long long int;
using ld = long double;
using vll = vector<ll>;
using vvll = vector<vll>;
using vi = vector<int>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vpii = vector<pii>;
using vpll = vector<pll>;
using vvi = vector<vi>;
using vvpii = vector<vpii>;
using vvpll = vector<vpll>;
#define PQ priority_queue
#define PI acos(ld(-1))
auto fno = []() { cout << "NO" << endl; };
auto fyes = []() { cout << "YES" << endl; };
void time(void (*fun)(void))
{
    auto start = chrono::high_resolution_clock::now();

    fun();

    auto stop = chrono::high_resolution_clock::now();
    auto duration = chrono::duration_cast<chrono::milliseconds>(stop - start);
    cout << duration.count() << endl;
}
template <class T>
void sort(vector<T> &x)
{
    sort(x.begin(), x.end());
}
template <class T>
void rsort(vector<T> &x)
{
    sort(x.rbegin(), x.rend());
}
void beep()
{
#ifndef ONLINE_JUDGE
    cout << "beep";
#endif
}
map<int,int> mp;
int query(int r)
{
    int ans;
    if(mp.count(r))
    {
        ans =  mp[r];
    }
    else{
        cout << "? " << 1 << " " << r << endl;
        cin >> ans;
        if (ans == -1)
            exit(-1);
        ans = r - ans;
    }
    mp[r] = ans;
    return ans;
}

void solve()
{
    int n, t;
    cin >> n >> t;
    while(t--){
        int k;
        cin >> k;
        int l = 1, r = n;
        int ans = n;
        while (l <= r)
        {
            int m = (l + r) / 2;
            int q = query(m);
            if (q >= k)
            {
                ans = min(ans, m);
                r = m - 1;
            }
            else
            {
                l = m + 1;
            }
        }
        cout << "! " << ans << endl;

        for(auto m = mp.rbegin(); m != mp.rend() && m->first >= ans; m++){
            m->second--;//update non smaller indices
        }
    }
}
int main()
{
    //ofstream cout("outpUt.txt");
    //ifstream cin("inpUt.txt");
    //freopen("outpUt.txt", "w", stdout);
    //freopen("inpUt.txt", "r", stdin);
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    solve();
    cout.flush();
}