const int limit=5e5;
const int N=5e5+5;
int n,m,t;
int i,j,k;
int a[N];
struct node
{
int l,r;
int sum;
}tree[N<<2];
void build(int l,int r,int id)
{
tree[id].l=l,tree[id].r=r;
if(l==r) tree[id].sum=a[l];
else{
int mid=l+r>>1;
build(l,mid,id<<1);
build(mid+1,r,id<<1|1);
tree[id].sum=tree[id<<1].sum+tree[id<<1|1].sum;
}
}
int query(int l,int r,int id)
{
if(l<=tree[id].l && r>=tree[id].r) return tree[id].sum;
if(l>tree[id].r || r<tree[id].l) return 0;
int sum=0;
if(tree[id<<1].r>=l) sum+=query(l,r,id<<1);
if(tree[id<<1|1].l<=r) sum+=query(l,r,id<<1|1);
return sum;
}
void update(int pos,int val,int id)
{
if(tree[id].l==tree[id].r){ tree[id].sum+=val; return ; }
if(tree[id<<1].r>=pos) update(pos,val,id<<1);
else update(pos,val,id<<1|1);
tree[id].sum=tree[id<<1].sum+tree[id<<1|1].sum;
}
int main()
{
//IOS;
while(sdd(n,m)==2){
for(i=1;i<=n;i++) sd(a[i]);
build(1,limit,1);
for(i=1;i<=m;i++){
int tag,x,y;
sddd(tag,x,y);
if(tag==1){
update(x,y,1);
}
else{
pd(query(x,y,1));
}
}
}
return 0;
//PAUSE;
}