#include <bits/stdc++.h>
using namespace std;
const int DIM = 1 << 17;
int bit[DIM];
inline void update(int p, int x)
{
for (int i = p; i < DIM; i += (i & (-i)))
bit[i] += x;
return;
}
inline int query1(int p, int x = 0)
{
for (int i = p; i > 0; i -= (i & (-i)))
x += bit[i];
return x;
}
inline int query2(int x, int s = 0, int p = 0)
{
for (int i = (DIM >> 1); i; i >>= 1)
if (s + bit[p + i] <= x)
s += bit[p + i], p += i;
return (s == x) ? (p == 0 ? -1 : p) : -1;
}
int main(void)
{
freopen("aib.in" , "r", stdin );
freopen("aib.out", "w", stdout);
int n, q;
scanf("%d %d", &n, &q);
for (int i = 1; i <= n; ++i) {
int x;
scanf("%d", &x);
update(i, x);
}
while (q--) {
int t, p, x, y;
scanf("%d", &t);
switch(t) {
case 0:
scanf("%d %d", &p, &x);
update(p, x);
break;
case 1:
scanf("%d %d", &x, &y);
printf("%d\n", query1(y) - query1(x - 1));
break;
case 2:
scanf("%d", &x);
printf("%d\n", min(n, query2(x)));
break;
}
}
return 0;
}