#include <string.h>
#include <stdio.h>
#define N 100001
#define p(x) ((x^(x-1))/2+1)
unsigned long v[N];
long bin(long min,long max,long n)
{long i,s,mid=(min+max)/2;
for (s=0,i=mid;i>=1;i-=p(i))
{s+=v[i];}
if(s==n){return mid;}
else if(s>n){return bin(1,mid-1,n);}
else return bin(mid+1,max,n);
}
int main ()
{FILE *fin,*fout;
unsigned long a,b,n,m,i,j,k,s;int f;
memset(v,0,sizeof(v));
fin=fopen("aib.in","r");
fout=fopen("aib.out","w");
fscanf(fin,"%ld%ld",&n,&m);
for (i=1;i<=n;i++)
{fscanf(fin,"%ld",&v[i]);
}
for (i=1;i<=n;i++)
{
for (k=p(i)-1,j=i-1;k>0;j-=p(j),k/=2)
{v[i]+=v[j];}
}
for (i=1;i<=m;i++)
{fscanf(fin,"%d",&f);
switch(f)
{case 0:fscanf(fin,"%ld%ld",&a,&b);
for (j=a;j<=n;j+=p(j))
{v[j]+=b;}
break;
case 1:
fscanf(fin,"%ld%ld",&a,&b);
for (s=0,j=b;j>=1;j-=p(j))
{s+=v[j];}
for (j=a-1;j>=1;j-=p(j))
{s-=v[j];}
fprintf(fout,"%ld\n",s);
break;
case 2:
fscanf(fin,"%ld",&a);
fprintf(fout,"%ld\n",bin(1,n,a));
break;
}
}
fclose(fout);
return 0;
}