#include<cstdio>
#include<cstring>
int n,m,i,j,op,a,b,s1,s2,s,xstep,v[100100];
FILE *f,*g;
void upd(int a,int b){
for(j=a ; j<=n ; j += ( j & ( - j ) ) ){
v[j]+=b;
}
}
int query(int a,int b){
s1=s2=0;
int j;
for(j=a-1 ; j>0 ; j -= ( j & ( - j ) ) ){
s1+=v[j];
}
for(j=b ; j>0 ; j -= ( j & ( - j ) ) ){
s2+=v[j];
}
return s2-s1;
}
int sa(int a){
int s=0,j=0;
for( xstep = 1; xstep < n; xstep <<= 1 );
for(; xstep > 0 ; xstep>>=1 ){
if( j + xstep <= n){
if(s + v[j+xstep] < a) {
s+=v[j+xstep];
j+=xstep;
}
}
}
if(query(1,j+1)==a)
return j+1;
return -1;
}
int main(){
f=fopen("aib.in","r");
g=fopen("aib.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++){
fscanf(f,"%d",&a);
for(j=i ; j<=n ; j += ( j & ( - j ) ) ){
v[j]+=a;
}
}
for(i=1;i<=m;i++){
fscanf(f,"%d",&op);
if(!op){
fscanf(f,"%d%d",&a,&b);
upd(a,b);
}
else if(op==1){
fscanf(f,"%d%d",&a,&b);
fprintf(g,"%d\n",query(a,b));
}
else{
fscanf(f,"%d",&a);
fprintf(g,"%d\n",sa(a));
}
}
fclose(f);
fclose(g);
return 0;
}