#include <iostream>
#include <stdio.h>
using namespace std;
int arb[200010];
int n,m,a,b;
int constructie(int st,int dr,int k)
{
if(st==dr)
{
scanf("%d",&arb[k]);
return arb[k];
}
int mij=(st+dr)/2;
return arb[k]=constructie(st,mij,2*k)+constructie(mij+1,dr,2*k+1);
}
void update(int st, int dr, int k)
{
if(st==dr && st==a)
{
arb[k]+=b;
return;
}
int mij=(st+dr)/2;
if(a>mij)
{
update(mij+1,dr,2*k+1);
arb[k]+=b;
return;
}
update(st,mij,2*k);
arb[k]+=b;
return;
}
int srch(int st, int dr, int k)
{
if(st>=a && dr<=b)
return arb[k];
int mij=(st+dr)/2;
int sum=0;
if(mij>=a)
sum+=srch(st,mij,2*k);
if(mij+1<=b)
sum+=srch(mij+1,dr,2*k+1);
return sum;
}
int ok=1;
void sum(int st, int dr, int k)
{
if(arb[k]==a)
{
printf("%d\n",dr);
ok=0;
return;
}
int mij=(st+dr)/2;
sum(st,mij,2*k);
}
void citire()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
constructie(1,n,1);
for(int i=0;i<m;i++)
{
int x;
scanf("%d",&x);
if(x==0)
{
scanf("%d %d",&a,&b);
update(1,n,1);
}
else if(x==1)
{
scanf("%d %d",&a,&b);
printf("%d\n",srch(1,n,1));
}
else if(x==2)
{
scanf("%d",&a);
ok=1;
sum(1,n,1);
}
}
}
int main()
{
citire();
return 0;
}