#include <bits/stdc++.h>
using namespace std;
long long int mg[200007], st[35], fen[200005], grupa[200004], n;
set<long long int> um[35];
void sredi(long long int poz, long long int v) {
  long long int i;
  for (i = poz; i <= n; i += i & -i) fen[i] += v;
}
long long int resi(long long int poz) {
  long long int s = 0;
  while (poz > 0) {
    s += fen[poz];
    poz -= poz & -poz;
  }
  return s;
}
int main() {
  long long int q, i, j, k, x, t, h, res, p, v, g;
  cin >> n >> q;
  for (i = 1; i <= n; i++) {
    cin >> mg[i];
    sredi(i, mg[i]);
  }
  st[0] = 1;
  for (i = 1; i <= 30; i++) st[i] = st[i - 1] * 2;
  for (i = 1; i <= n; i++) {
    if (mg[i] == 0) {
      um[31].insert(i);
      grupa[i] = 31;
    }
    for (j = 30; j >= 0; j--)
      if (st[j] & mg[i]) {
        um[j].insert(i);
        grupa[i] = j;
        break;
      }
  }
  for (h = 1; h <= q; h++) {
    res = -1;
    cin >> p >> v;
    sredi(p, v - mg[p]);
    mg[p] = v;
    g = grupa[p];
    um[g].erase(p);
    if (v == 0) {
      um[31].insert(p);
      grupa[p] = 31;
    }
    for (j = 30; j >= 0; j--)
      if (st[j] & v) {
        um[j].insert(p);
        grupa[p] = j;
        break;
      }
    for (i = 0; i <= 31; i++) {
      j = 0;
      for (auto it = um[i].begin();
           j < std::min(2ll, (long long int)(um[i].size())); j++, it++) {
        t = *it;
        x = resi(t);
        if (x == 2 * mg[t]) res = t;
      }
    }
    cout << res << endl;
  }
  return 0;
}
