#include<cstring>
int n,len=0;
struct nod{int l,r,ls,rs,c;nod(){c=0;};}a[1000010];
void br(int l,int r)
{
len++;int x=len;
a[x].l=l;a[x].r=r;
int m=(l+r)/2;
if(l!=r)
{
a[x].ls=len+1;br(l,m);
a[x].rs=len+1;br(m+1,r);
}
}
void gd(int x,int k,int c)
{
a[x].c+=c;
if(a[x].l==a[x].r&&a[x].l==k)return ;
int m=(a[x].l+a[x].r)/2;
if(k<=m){gd(a[x].ls,k,c);}
else{gd(a[x].rs,k,c);}
}
int cz(int x,int l,int r)
{
if(a[x].l==l&&a[x].r==r){return a[x].c;}
int m=(a[x].l+a[x].r)/2;
if(r<=m){return cz(a[x].ls,l,r);}
else if(l>=m+1){return cz(a[x].rs,l,r);}
else{return (cz(a[x].ls,l,m)+cz(a[x].rs,m+1,r));}
}
int main()
{
scanf("%d",&n);int k;scanf("%d",&k);
br(1,n);
for(int i=1;i<=n;i++)
{
int x;scanf("%d",&x);
gd(1,i,x);
}
for(int i=1;i<=k;i++)
{
int tt,x,y,c;
scanf("%d",&tt);scanf("%d %d",&x,&c);
if(tt==1)
{
gd(1,x,c);
}
if(tt==2)
{
printf("%d\n",cz(1,x,c));
}
}
}