#include <bits/stdc++.h>
using namespace std;
int aint[400005],a[100005],n,q,sum,i,cod,x,y;
void build(int nod, int st, int dr)
{
int mij;
if(st==dr)
{
aint[nod]=a[st];
return;
}
mij=(st+dr)/2;
build(nod*2,st,mij);
build(nod*2+1,mij+1,dr);
aint[nod]=aint[nod*2]+aint[nod*2+1];
}
void update(int nod, int st, int dr, int poz, int val)
{
int mij;
if(st==dr)
{
aint[nod]+=val;
return;
}
mij=(st+dr)/2;
if(poz<=mij)update(nod*2,st,mij,poz,val);
else update(nod*2+1,mij+1,dr,poz,val);
aint[nod]=aint[nod*2]+aint[nod*2+1];
}
void query(int nod, int st, int dr, int x, int y)
{
int mij;
if(x<=st&&y>=dr)
{
sum=sum+aint[nod];
return;
}
mij=(st+dr)/2;
if(x<=mij)query(nod*2,st,mij,x,y);
if(y>=mij+1)query(nod*2+1,mij+1,dr,x,y);
}
void pozitie(int nod, int st, int dr, int suma)
{
int mij;
if(aint[nod]==suma)
{
sum=dr;
return;
}
mij=(st+dr)/2;
if(aint[nod*2]>=suma)pozitie(nod*2,st,mij,suma);
else pozitie(nod*2+1,mij+1,dr,suma-aint[nod*2]);
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&n,&q);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,1,n);
while(q)
{
q--;
scanf("%d",&cod);
if(cod==0)
{
scanf("%d%d",&x,&y);
update(1,1,n,x,y);
}
if(cod==1)
{
scanf("%d%d",&x,&y);
sum=0;
query(1,1,n,x,y);
printf("%d\n",sum);
}
if(cod==2)
{
sum=0;
scanf("%d",&x);
pozitie(1,1,n,x);
if(sum==0)sum=-1;
printf("%d\n",sum);
}
}
return 0;
}