#include<stdio.h>
using namespace std;
FILE *f1=fopen("aib.in","r");
FILE *f2=fopen("aib.out","w");
int aib[100001],i,j,n,m,v[100001],val,a,b,s1,s2;
void creare(int i){
int index;
index=i;
while(index<=n){
aib[index]=aib[index]+val;
index=index+(index & (-index));
}
}
int sum(int i){
int index,s=0;
index=i;
while(index>0){
s=s+aib[index];
index=index-(index&(-index));
}
return s;
}
int caut(int st,int dr,int val){
int mij,s;
if (st>dr) return -1;
if (st==dr && aib[st]==val) return st;
if (st==dr && aib[st]!=val) return -1;
mij=(st+dr)/2;
s=sum(mij);
if (s<val) return caut(mij+1,dr,val);
else
return caut(st,mij,val);
}
int main(){
fscanf(f1,"%d%d",&n,&m);
for (i=1;i<=n;i++){
fscanf(f1,"%d",&v[i-1]);
val=v[i-1];
creare(i);
}
for (i=1;i<=m;i++){
fscanf(f1,"%d",&j);
if (j==1 || j==0) fscanf(f1,"%d%d",&a,&b);
else
fscanf(f1,"%d",&a);
if (j==0){
val=b;
creare(a);
}
else
if (j==1){
s1=sum(b);s2=sum(a-1);
fprintf(f2,"%d\n",s1-s2);
}
else{
fprintf(f2,"%d\n",caut(1,n,a));
}
}
fclose(f1);
fclose(f2);
return 0;
}