#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int p,cat,n,i,j,nr,sum[200000],l1,l2,a,b,x,m,k,o;
void update(int nr,int st,int dr)
{
if(st==dr)
{
sum[nr]+=cat;
return;
}
int md=(st+dr)/2;
if(p<=md) update(nr*2,st,md);
else update(nr*2+1,md+1,dr);
sum[nr]=sum[nr*2]+sum[nr*2+1];
}
int queab(int nr,int st,int dr)
{
if(st>=a&&dr<=b) return sum[nr];
int md=st+(dr-st)/2,r=0;
l1=st; l2=md;
if(max(l1,a)<=min(l2,b)) r+=queab(nr*2,l1,l2);
l1=md+1;l2=dr;
if(max(l1,a)<=min(l2,b)) r+=queab(nr*2+1,l1,l2);
return r;
}
int quek(int nr,int st,int dr)
{
if(st==dr) return st;
int md=st+(dr-st)/2,p=0;
if(sum[nr*2]>=k) p=quek(nr*2,st,md);
else
{
k-=sum[nr*2];
p=quek(nr*2+1,md+1,dr);
}
return p;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
p=i;
fin>>cat;
update(1,1,n);
}
for(i=1;i<=m;i++)
{
fin>>o;
if(o==0)
{
fin>>p>>cat;
update(1,1,n);
}
if(o==1)
{
fin>>a>>b;
fout<<queab(1,1,n)<<"\n";
}
if(o==2)
{
fin>>k;
fout<<quek(1,1,n)<<"\n";;
}
}
}