#include <stdio.h>
#include <ctype.h>
#define MAXN 100000
int aib[MAXN + 1];
FILE *fin, *fout;
void update(int poz, int val, int n){
int i;
for( i = poz; i <= n; i += (i & -i))
aib[i] += val;
}
int query(int poz){
int i, sum = 0;
for( i = poz; i > 0; i -= (i & -i))
sum += aib[i];
return sum;
}
int main(){
int n, i, x, q, a, b, m, st, dr, mij;
fin = fopen( "aib.in", "r" );
fout = fopen( "aib.out", "w" );
fscanf( fin, "%d%d", &n, &m );
for(i = 0; i < n; i++){
fscanf(fin, "%d", &x);
update(i + 1, x, n);
}
while(m--){
fscanf(fin, "%d", &q);
if(q == 0){
fscanf(fin, "%d%d", &a, &b);
update(a, b, n);
}else if(q == 1){
fscanf(fin, "%d%d", &a, &b);
fprintf(fout, "%d\n", query(b) - query(a - 1));
}else{
fscanf(fin, "%d", &a);
st = 1;
dr = n + 1;
while(dr - st > 1){
mij = (st + dr) / 2;
if(query(mij) > a)
dr = mij;
else
st = mij;
}
if(query(st) != a)
fprintf(fout, "-1\n");
else
fprintf(fout, "%d\n", st);
}
}
fclose( fin );
fclose( fout );
return 0;
}