#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int t[500005];
void update(int nod,int st,int dr,int nr,int pos)
{
if(dr==st)
{
t[nod]+=nr;
return;
}
int m=(st+dr)/2;
if(pos<=m)
{
update(2*nod,st,m,nr,pos);
}
else
{
update(2*nod+1,m+1,dr,nr,pos);
}
t[nod]=t[nod*2]+t[nod*2+1];
}
int s;
void intrebare(int nod,int st,int dr,int stdorit,int drdorit)
{
if(stdorit<=st && dr<=drdorit)
{
s+=t[nod];
return;
}
int m=(st+dr)/2;
if(stdorit<=m)
{
intrebare(2*nod,st,m,stdorit,drdorit);
}
if(m<drdorit)
{
intrebare(2*nod+1,m+1,dr,stdorit,drdorit);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,q;
in>>n>>q;
int nr;
for(int i=1;i<=n;i++)
{
in>>nr;
update(1,1,n,nr,i);
}
int tip,a,b;
for(int i=1;i<=q;i++)
{
in>>tip;
if(tip==1)
{
in>>a>>b;
s=0;
intrebare(1,1,n,a,b);
out<<s<<"\n";
}
else if(tip==0)
{
in>>a>>b;
update(1,1,n,b,a);
}
else
{
int nr;
in>>nr;
int dr=n,st=1,m,poz=-1,sumt=0;
while(dr>=st)
{
m=(dr+st)/2;
s=0;
intrebare(1,1,n,st,m);
if(s+sumt==nr)
{
poz=m;
break;
}
if(s+sumt>nr)
{
dr=m-1;
}
else
{
st=m+1;
sumt+=s;
}
}
out<<poz<<"\n";
}
}
return 0;
}