#include <bits/stdc++.h>
long long int segMax[1000010] = {0}, segSum[1000010] = {0};
long long int a[200010];
void constructMax(int low, int high, int pos) {
  if (low > high) return;
  if (low == high) {
    segMax[pos] = a[low];
    return;
  }
  int mid = low + (high - low) / 2;
  constructMax(low, mid, pos * 2 + 1);
  constructMax(mid + 1, high, pos * 2 + 2);
  segMax[pos] = std::max(segMax[pos * 2 + 1], segMax[pos * 2 + 2]);
}
void updateMax(int low, int high, int node, long long int val, int pos) {
  if (low == high && low == node) {
    segMax[pos] = val;
    return;
  }
  if (high < node || low > node) return;
  int mid = low + (high - low) / 2;
  updateMax(low, mid, node, val, pos * 2 + 1);
  updateMax(mid + 1, high, node, val, pos * 2 + 2);
  segMax[pos] = std::max(segMax[pos * 2 + 1], segMax[pos * 2 + 2]);
}
void constructSum(int low, int high, int pos) {
  if (low > high) return;
  if (low == high) {
    segSum[pos] = a[low];
    return;
  }
  int mid = low + (high - low) / 2;
  constructSum(low, mid, pos * 2 + 1);
  constructSum(mid + 1, high, pos * 2 + 2);
  segSum[pos] = segSum[pos * 2 + 1] + segSum[pos * 2 + 2];
}
void updateSum(int low, int high, int node, long long int val, int pos) {
  if (low == high && low == node) {
    a[low] = val;
    segSum[pos] = val;
    return;
  }
  if (low > node || high < node) return;
  int mid = low + (high - low) / 2;
  updateSum(low, mid, node, val, pos * 2 + 1);
  updateSum(mid + 1, high, node, val, pos * 2 + 2);
  segSum[pos] = segSum[pos * 2 + 1] + segSum[pos * 2 + 2];
}
int findMax(int low, int high, int sumToFind, int pos) {
  if (low == high && segMax[pos] >= sumToFind) {
    return low;
  } else if (low == high) {
    return -1;
  }
  int mid = low + (high - low) / 2;
  if (segMax[pos * 2 + 1] >= sumToFind) {
    return findMax(low, mid, sumToFind, pos * 2 + 1);
  } else if (segMax[pos * 2 + 2] >= sumToFind) {
    return findMax(mid + 1, high, sumToFind, pos * 2 + 2);
  } else {
    return -1;
  }
}
long long int findSum(int qlow, int qhigh, int low, int high, int pos) {
  if (high < qlow || low > qhigh) return 0;
  if (qlow > qhigh)
    return 0;
  else if (qlow <= low && high <= qhigh) {
    return segSum[pos];
  }
  int mid = low + (high - low) / 2;
  return findSum(qlow, qhigh, low, mid, pos * 2 + 1) +
         findSum(qlow, qhigh, mid + 1, high, pos * 2 + 2);
}
int main() {
  std::ios_base::sync_with_stdio(0);
  std::cin.tie(0);
  int n, q;
  std::cin >> n >> q;
  for (int i = 0; i < n; ++i) {
    std::cin >> a[i];
  }
  constructMax(1, n - 1, 0);
  constructSum(1, n - 1, 0);
  while (q--) {
    int node;
    long long int val;
    std::cin >> node >> val;
    --node;
    if (node != 0) {
      updateMax(1, n - 1, node, val, 0);
      updateSum(1, n - 1, node, val, 0);
    } else {
      a[node] = val;
    }
    if (a[0] == 0) {
      std::cout << "1\n";
      continue;
    }
    long long int curSum = a[0];
    bool flag = false;
    while (curSum <= 1e9) {
      int node = findMax(1, n - 1, curSum, 0);
      long long int nowSum;
      if (node == -1)
        break;
      else {
        nowSum = findSum(1, node - 1, 1, n - 1, 0);
        nowSum += a[0];
      }
      if (nowSum == a[node]) {
        std::cout << node + 1 << "\n";
        flag = true;
        break;
      } else {
        curSum = nowSum + a[node];
      }
    }
    if (!flag) {
      std::cout << "-1\n";
    }
  }
}
