#include <fstream>
#include <iostream>
#include <queue>
using namespace std;
const int N=1e4+5e3;
int aint[4*N];
int a[N];
int max(int a, int b){
return a > b ? a : b;
}
void init(int node, int st, int dr){
if(st==dr){
aint[node]=a[st];
return;
}
int mij=(st+dr)/2;
init(2*node+1, st, mij);
init(2*node+2, mij+1, dr);
aint[node]=aint[2*node+1]+aint[2*node+2];
}
void update(int node, int st, int dr, int poz, int x){
if(st>poz || dr<poz)
return;
if(st==dr){
aint[node]-=x;
return;
}
int mij=(st+dr)/2;
if(mij>=poz)
update(2*node+1, st, mij, poz, x);
else
update(2*node+2, mij+1, dr, poz, x);
aint[node]=aint[2*node+1]+aint[2*node+2];
}
int query(int node, int st, int dr, int l, int r){
if(st>r || dr<l)
return 0;
if(l<=st && dr<=r)
return aint[node];
int mij=(st+dr)/2;
return query(2*node+1, st, mij, l, r)+query(2*node+2, mij+1, dr, l, r);
}
int main(){
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m, tip, l, r, poz, x;
fin>>n>>m;
for(int i=0; i<n; i++)
fin>>a[i];
init(0, 0, n-1);
for(int i=0; i<m; i++){
fin>>tip;
if(tip==0){
fin>>poz>>x;
update(0, 0, n-1, poz-1, x);
}else{
fin>>l>>r;
fout<<query(0, 0, n-1, l-1, r-1)<<"\n";
}
}
return 0;
}