#include<cstdio>
int n,m,i,j,op,a,b,v[100100];
FILE *f,*g;
void upd( int poz , int val ){
for(int i=poz; i<=n; i += ( i & ( -i ) ) )
v[i] += val;
}
int query( int a, int b ){
int s1=0,s2=0;
for(int i=a-1; i>0; i -= ( i & ( -i ) ) )
s1 += v[i];
for(int i=b; i>0; i -= ( i & ( -i ) ) )
s2 += v[i];
return s2-s1;
}
int sum( int a ){
int s=0,j=0,i=0;
for(i=1; i<=n; i *= 2 );
for( ; i>0; i/=2 ){
if( i + j <= n && s + v[i+j] < a ){
s+=v[i+j];
j+=i;
}
}
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);
upd(i,a);
}
for(i=1;i<=m;i++){
fscanf(f,"%d",&op);
if(op==0){
fscanf(f,"%d%d",&a,&b);
upd(a,b);
}
if(op==1){
fscanf(f,"%d%d",&a,&b);
fprintf(g,"%d\n", query(a,b) );
}
if(op==2){
fscanf(f,"%d",&a);
fprintf(g,"%d\n",sum(a));
}
}
fclose(f);
fclose(g);
return 0;
}