#include <cstdio>
#include <algorithm>
#define nmax 15001
#define mmax 100001
using namespace std;
int arb[nmax+mmax];
int n, m;
void udpate(int nod, int st, int dr, int poz, int val){
if (st == dr){
arb[nod]+=val;
return;
}else {
int mij=(st + dr) / 2;
if (poz <= mij) udpate(nod*2, st, mij, poz, val);
else udpate(nod*2+1, mij+1, dr, poz, val);
}
arb[nod]=arb[nod*2] + arb[nod*2+1];
}
int query(int nod, int st, int dr, int a, int b){
if (st >= a && dr <= b){
return arb[nod];
}
int mij=(st + dr) / 2;
int s=0;
if (a<=mij) s+=query(nod*2, st, mij, a, b);
if (b> mij) s+=query(nod*2+1, mij+1, dr, a, b);
return s;
}
int main(){
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d %d\n",&n, &m);
for(int i=1;i<=n;i++){
int x;
scanf("%d ", &x);
udpate(1,1,n,i,x);
}
//for(int i=1;i<=n;i++) printf("%d ",arb[i]);
//printf("\n");
for(int i=1;i<=m;i++){
int tip, x, y;
scanf("%d %d %d\n", &tip, &x, &y);
if (tip){
printf("%d\n",query(1,1,n,x,y));
}
if (tip == 0){
udpate(1,1,n,x,-y);
}
}
return 0;
}