#include<cstdio>
#include<fstream>
using namespace std;
int ai[210000],a,b,val,poz,SUMA,k,n;
void adauga(int nod, int s, int d)
{
if(s==d) ai[nod]+=val;
else
{
int m=(s+d)/2;
ai[nod]+=val;
if(poz<=m) adauga(nod*2,s,m);
else adauga(nod*2+1,m+1,d);
}
}
void suma(int nod, int s, int d)
{
if(a<=s && d<=b) SUMA+=ai[nod];
else
{
int m=(s+d)/2;
if(a<=m) suma(nod*2,s,m);
if(b>m) suma(nod*2+1,m+1,d);
}
}
void kmin(int nod, int s, int d)
{
if(ai[nod]==a) k=d;
else if(s==d && a!=ai[nod]) k=-1;
else if(nod<=n)
{
int m = (s+d)/2;
if(ai[nod*2]>a ) kmin(nod*2,s,m);
else
{
a-=ai[nod*2];
k=m;
if(a>0) kmin(nod*2+1,m+1,d);
}
}
}
int main()
{
ifstream fin("aib.in");
freopen("aib.out","w",stdout);
int m,x;
fin>>n>>m;
for(int i=1; i<=n; ++i)
{
fin>>x;
val=x;
poz=i;
adauga(1,1,n);
}
for(int i=1; i<=m; ++i)
{
fin>>x>>a;
if(x==0)
{
fin>>b;
val=b;
poz=a;
adauga(1,1,n);
}
else if(x==1)
{
fin>>b;
SUMA=0;
suma(1,1,n);
printf("%d\n",SUMA);
}
else
{
kmin(1,1,n);
printf("%d\n",k);
}
//printf("\n\n\n%d",ai[1]);
}
return 0;
}