#include <fstream>
#define DIM 100002
using namespace std;
int n,m,x,a,b;
long arb[7*DIM];
short t;
void Update(int k,int poz,int x,int st,int dr){
arb[k]+=x;
int mid=(st+dr)/2;
if(st==dr) return;
if(poz<=mid) Update(k*2,poz,x,st,mid);
else Update(k*2+1,poz,x,mid+1,dr);
}
int Queri(int k,int a,int b,int st,int dr){
if(a<=st && b>=dr) return arb[k];
else{
int mid=(st+dr)/2;
if(b<=mid) return Queri(k*2,a,b,st,mid);
else if(a>mid) return Queri(k*2+1,a,b,mid+1,dr);
else return Queri(k*2,a,mid,st,mid)+Queri(k*2+1,mid+1,b,mid+1,dr);
}
}
int search(int k, int a,int st,int dr){
if(arb[k]==a) return dr;
else if(st>=dr) return -1;
int mid=(st+dr)/2;
if(arb[k*2]>=a) return search(k*2,a,st,mid);
else return search(k*2+1,a-arb[k*2],mid+1,st);
}
int main()
{
ifstream f("aib.in");
ofstream g("aib.out");
f>>n>>m;
for(int i=1;i<=n;++i){
f>>x;
Update(1,i,x,1,n);
}
for(int i=1;i<=m;++i){
f>>t;
if(t<2){
f>>a>>b;
if(t==0) Update(1,a,b,1,n);
else g<<Queri(1,a,b,1,n)<<'\n';
}
else {
f>>a;
g<<search(1,a,1,n)<<'\n';
}
}
f.close();
g.close();
return 0;
}