#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int N[60001],T[15001];
void build(int nod, int st, int dr){
int mij=(st+dr)/2;
if(st<dr){
build(nod*2,st,mij);
build(nod*2+1,mij+1,dr);
N[nod]=N[nod*2]+N[nod*2+1];
}
else{
N[nod]=T[st];
}
}
void update(int val, int nod, int st, int dr, int poz){
int mij=(st+dr)/2;
if(st<dr){
if(poz<=mij){
update(val,nod*2,st,mij,poz);
}
else{
update(val,nod*2+1,mij+1,dr,poz);
}
N[nod]=N[nod*2]+N[nod*2+1];
}
else{
N[nod]-=val;
}
}
int query(int nod, int stint, int drint, int st, int dr){
int mij=(st+dr)/2,r1=0,r2=0;
if(stint<=st&&dr<=drint){
return N[nod];
}
else{
if(stint<=mij){
r1 = query(nod*2,stint,drint,st,mij);
}
if(drint>mij){
r2 = query(nod*2+1,stint,drint,mij+1,dr);
}
return r1+r2;
}
}
int main()
{
int n,i,q,tip,poz,val,st,dr,mx=0;
f >> n >> q;
for(i=1;i<=n;i++){
f >> T[i];
}
build(1,1,n);
for(i=1;i<=q;i++){
f >> tip;
if(tip==0){
f >> poz >> val;
update(val,1,1,n,poz);
}
else{
f >> st >> dr;
g << query(1,st,dr,1,n) << '\n';
}
}
return 0;
}