#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m,caz,x,y;
int arbore[4*15010];
void build(int,int,int);
void update(int,int,int,int,int);
int query(int,int,int,int,int);
int main()
{
fin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i+=1)
{
fin>>caz>>x>>y;
if(caz==0)
update(1,1,n,x,y);
else
fout<<query(1,1,n,x,x+y)<<'\n';
}
return 0;
}
void build(int nod,int left,int right)
{
if(left==right)
{
fin>>arbore[nod];
return;
}
int st=nod<<1, dr=nod<<1|1, mid=(left+right)>>1;
build(st,left,mid);
build(dr,mid+1,right);
arbore[nod]=arbore[st]+arbore[dr];
}
int query(int nod,int left, int right, int x, int y)
{
if(x<=left && right<=y)
return arbore[nod];
int st=nod<<1, dr=nod<<1|1, mid=(left+right)>>1;
if(y<=mid)
return query(st,left,mid,x,y);
else if(x>mid)
return query(dr,mid+1,right,x,y);
else
return query(st,left,mid,x,y)+query(dr,mid+1,right,x,y);
}
void update(int nod, int left, int right, int pos, int val)
{
if(left==right)
{
arbore[nod]-=val;
return;
}
int st=nod<<1, dr=nod<<1|1, mid=(left+right)>>1;
if(pos<=mid)
update(st,left,mid,pos,val);
else
update(dr,mid+1,right,pos,val);
arbore[nod]=arbore[st]+arbore[dr];
}