#include <bits/stdc++.h>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
#define maxN 15000
int aint[4*maxN],v[maxN];
void build(int nod, int left, int right){
if(left==right){
aint[nod]=v[left];
return;
}
int mid,lson,rson;
mid=(left+right)/2;
lson=nod*2;
rson=lson+1;
build(lson,left,mid);
build(rson,mid+1,right);
aint[nod]=aint[lson]+aint[rson];
}
int query(int nod, int nleft, int nright, int qleft, int qright){
if(nleft>=qleft && nright<=qright){
return aint[nod];
}
int mid,lson,rson,res;
mid=(nleft+nright)/2;
lson=nod*2;
rson=lson+1;
res=0;
if(qleft<=mid){
res+=query(lson,nleft,mid,qleft,qright);
}
if(mid<qright){
res+=query(rson,mid+1,nright,qleft,qright);
}
return res;
}
void update(int nod, int left, int right, int poz, int val){
if(left==right){
aint[nod]-=val;
return;
}
int mid,lson,rson;
mid=(left+right)/2;
lson=2*nod;
rson=lson+1;
if(poz<=mid){
update(lson,left,mid,poz,val);
}
else{
update(rson,mid+1,right,poz,val);
}
aint[nod]=aint[lson]+aint[rson];
}
int main(){
int n,q;
in>>n>>q;
for(int i=1;i<=n;i++){
in>>v[i];
}
build(1,1,n);
for(int i=1;i<=q;i++){
int type,a,b;
in>>type>>a>>b;
if(type==1){
out<<query(1,1,n,a,b)<<'\n';
}
else{
update(1,1,n,a,b);
}
}
}