#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#include <iomanip>
#include <fstream>
#define MOD 105011
#define NMAX 10005
#define INF 0x3f3f3f3f
#define pb push_back
using namespace std;
FILE *fin = freopen("fisier.in", "r", stdin);
FILE *fout = freopen("fisier.out", "w", stdout);
typedef pair<int, int> pii;
int v[NMAX], n;
inline int lsb(int x) { return ((x&(x - 1)) ^ x); }
void update_aib(int poz, int val) {
while (poz <= n) {
v[poz] += val;
poz += lsb(poz);
}
}
int sum_aib(int poz) {
int s = 0;
while (poz > 0) {
s += v[poz];
poz -= lsb(poz);
}
return s;
}
int cauta(int sum) {
int i, p2 = 1;
while (p2 < n)
p2 <<= 1;
for (i = 0; p2 > 0; p2 >>= 1) {
if (i + p2 <= n && sum >= v[i + p2]) {
sum -= v[i + p2];
i += p2;
if (sum == 0)
return i;
}
}
return -1;
}
int main() {
int i, q, nr, t, a, b;
scanf("%d%d", &n, &q);
for (i = 1; i <= n; ++i) {
scanf("%d", &nr);
update_aib(i, nr);
}
for (i = 0; i < q; ++i) {
cin >> t;
if (t == 0) {
cin >> a >> b;
update_aib(a, b);
}
else if (t == 1) {
cin >> a >> b;
printf("%d\n", sum_aib(b) - sum_aib(a - 1));
}
else {
cin >> a;
printf("%d\n", cauta(a));
}
}
return 0;
}