#include <cstdlib>
#include <cstdio>
#include <iostream>
#define maxn 100001
#define maxm 150001
using namespace std;
int v[maxn];
int arb[maxn];
int sum(int value)
{
int s = 0, x, nr;
while (value > 0) {
x = value;
s += arb[value];
nr = 1;
while ((x & 1) == 0) {
nr = nr << 1;
x = x >> 1;
}
value -= nr;
}
return s;
}
int search(int val, int n)
{
int i, step;
for ( step = 1; step < n; step <<= 1 );
for( i = 0; step; step >>= 1 )
{
if( i + step <= n)
{
if( val >= arb[i+step] )
{
i += step, val -= arb[i];
if ( !val ) return i;
}
}
}
return -1;
}
void update(int poz, int val, int n)
{
int C = 0;
while (poz <= n)
{
arb[poz] += val;
while ( !(poz & (1<<C)) ) C++;
poz += (1<<C);
C += 1;
}
}
int main()
{
int n, m, i, cod, s, value1, value2, j, x, poz, nr;
FILE *f = fopen("aib.in", "rt");
FILE *g = fopen("aib.out", "wt");
fscanf(f, "%d" , &n);
fscanf(f, "%d" , &m);
for (i = 0; i < n; i++) {
fscanf(f, "%d" , &v[i]);
x = i + 1;
nr = 1;
while ((~x) & 1) {
nr = nr << 1;
x = x >> 1;
}
poz = i + 1;
for (j = 0; j < nr; j++) {
arb[i+1] += v[--poz];
}
}
for (i = 0; i < m; i++) {
fscanf (f, "%d" , &cod);
if (cod == 0) {
fscanf(f, "%d" , &value1);
fscanf(f, "%d" , &value2);
update(value1, value2, n);
}
if (cod == 1) {
fscanf(f, "%d" , &value1);
fscanf(f, "%d" , &value2);
s = sum(value2) - sum(value1 - 1);
fprintf(g, "%d\n" , s);
}
if (cod == 2) {
fscanf (f, "%d" , &value1);
fprintf(g, "%d\n", search(value1, n));
}
}
fclose(f);
fclose(g);
return 0;
}