#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,p1,Q,S,AIB[100005],R;
/*int Quest(int q,int x,int y,int st,int dr)
{int mid=(st+dr)/2;
if(x==st&&y==dr)return v[q];
else{if(y<=mid)return Quest(q*2,x,y,st,mid);
if(x>mid)return Quest(q*2+1,x,y,mid+1,dr);
return Quest(q*2,x,mid,st,mid)+Quest(q*2+1,mid+1,y,mid+1,dr);
}
}
void Quest1(int st,int dr,int q)
{int mid=(st+dr)/2;
if(st==dr){Q=st;}
else{if(v[q*2]<S){S=S-v[q*2];Quest1(mid+1,dr,q*2+1);}
else Quest1(st,mid,q*2);
}
}
*/
int zeros(int x)
{return (x^(x-1))&x;
}
void Add(int x,int quanty)
{int i;
for(i=x;i<=n;i=i+zeros(i))
{AIB[i]+=quanty;
}
}
int Compute(int x)
{int i,s=0;
for(i=x;i>0;i=i-zeros(i))
s=s+AIB[i];
return s;
}
void CautBin(int st,int dr)
{int mid=(st+dr)/2;
if(st==dr)R=st;
else{if(Compute(mid)<S)CautBin(mid+1,dr);
else CautBin(st,mid);
}
}
int main()
{int x,y,x1,y1,i;
fin>>n>>m;
for(i=1;i<=n;i++)
{fin>>x;
Add(i,x);
}
for(i=1;i<=m;i++)
{fin>>p1;
if(p1==0){fin>>x>>y;
Add(x,y);
}
else if(p1==1){fin>>x>>y;
fout<<Compute(y)-Compute(x-1)<<"\n";
}
else if(p1==2){fin>>S;
CautBin(1,n);
if(Compute(R)==S)fout<<R<<"\n";
else fout<<"-1\n";
}
}
}