#include <bits/stdc++.h>
#define DIM 1000000
char BUFF[1000000];
int k=0;
FILE*fi;
int cit(){
int nr=0;
while(BUFF[k]<'0' || BUFF[k]>'9'){
k++;
if(k==DIM){
fread(BUFF,1,DIM,fi);
k=0;
}
}
while(BUFF[k]>='0' && BUFF[k]<='9'){
nr=nr*10+BUFF[k]-'0';
k++;
if(k==DIM){
fread(BUFF,1,DIM,fi);
k=0;
}
}
return nr;
}
int aib[1<<18];
int v[100001];
void init(int st,int dr,int p){
if(st==dr){
aib[p]=v[st];
}
else {
int mij=(st+dr)/2;
init(st,mij,p*2);
init(mij+1,dr,p*2+1);
aib[p]=aib[p*2]+aib[p*2+1];
}
}
void update(int val,int nod,int st,int dr,int p){
if(st==dr)
aib[p]+=val;
else {
int mij=(st+dr)/2;
if(nod<=mij)
update(val,nod,st,mij,p*2);
else update(val,nod,mij+1,dr,p*2+1);
aib[p]=aib[p*2]+aib[p*2+1];
}
}
int calc(int a,int b,int st,int dr,int p){
if(a<=st && dr<=b)
return aib[p];
else {
int mij=(st+dr)/2,s=0;
if(a<=mij){
s+=calc(a,b,st,mij,p*2);
}
if(b>=mij+1)
{
s+=calc(a,b,mij+1,dr,p*2+1);
}
return s;
}
}
int main()
{
int n,m,k,i,q,a,b,r,p,s;
FILE*fo;
fi=fopen("aib.in","r");
fo=fopen("aib.out","w");
fread(BUFF,1,n,fi);
n=cit();
m=cit();
for(i=1;i<=n;i++){
v[i]=cit();
}
init(1,n,1);
for(i=0;i<m;i++){
q=cit();
if(q==0)
{
a=cit();
b=cit();
update(b,a,1,n,1);
}
else if(q==1){
a=cit();
b=cit();
fprintf(fo,"%d\n",calc(a,b,1,n,1));
}
else if(q==2){
k=cit();
r=0;
p=1<<17;
s=0;
q=0;
while(p>0){
if(r+p<=n){
q=calc(r+1,r+p,1,n,1);
if(s+q<k){
r+=p;
s+=q;
}
}
p/=2;
}
if(s+calc(r+1,r+1,1,n,1)==k)
fprintf(fo,"%d\n",r+1);
else fprintf(fo,"-1\n");
}
}
fclose(fi);
fclose(fo);
return 0;
}