#include <bits/stdc++.h>
using namespace std;
const int nMAX = 60000;
int v[nMAX],build[nMAX/4 + 100];
void buildtre(int nod,int l,int r){
if(l == r){
v[nod] = build[l];
return ;
}
int mij = (l + r) >> 1;
buildtre(2 * nod,l,mij);
buildtre(2 * nod + 1,mij + 1, r);
v[nod] = v[2 * nod] + v[2 * nod + 1];
}
void update(int nod,int l,int r,int poz,int val){
if(l == r){
v[nod] -= val;
return ;
}
int mij = (l + r) >> 1;
if(poz <= mij)
update(2 * nod,l,mij,poz,val);
else
update(2 * nod + 1,mij + 1, r,poz,val);
v[nod] = v[2 * nod] + v[2 * nod + 1];
}
int query(int nod,int l,int r,int m,int M){
if(l >= m && r <= M){
return v[nod];
}
int mij = (l + r) >> 1;
int A = 0, B = 0;
if(m <= mij)
A = query(2 * nod,l,mij,m,M);
if(M > mij)
B = query(2 * nod + 1,mij+1,r,m,M);
return A + B;
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
int n,m,val,x,y,q;
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++){
scanf("%d", &build[i]);
}
buildtre(1,1,n);
for(int i = 1; i <= m; i++){
scanf("%d %d %d", &q, &x, &y);
if(q == 0){
update(1,1,n,x,y);
} else {
printf("%d\n", query(1,1,n,x,y));
}
}
return 0;
}