#include <cstdio>
#include <cmath>
using namespace std;
int n, m;
long long k;
int arb[32000];
void calc(int st, int dr, int poz)
{
if(st==dr)
return;
int mij=(st+dr)/2;
calc(st,mij,2*poz);
calc(mij+1,dr,2*poz+1);
arb[poz]=arb[poz*2+1]+arb[poz*2];
}
void rez(){
scanf("%d %d",&n, &m);
for(k=1; k<=n; k<<=1);
for(int i=1; i<=n;i++){
scanf("%d", &arb[i+k-1]);
}
calc(1,k, 1);
}
void update(int pozarb, int val)
{
arb[pozarb]-=val;
if(pozarb==1)
return;
update(pozarb/2,val);
}
void tip0(int valoare, int acata){
update(acata+k-1,valoare);
}
int tip1(int st, int dr,int a, int b, int pozarb){
if(st>dr || st>b || dr<a)
return 0;
if(a<=st && dr<=b){
return arb[pozarb];
}
else{
int med=(st+dr)/2;
int aaa=tip1(st,med,a,b,pozarb*2);
int bbb=tip1(med+1,dr,a,b,pozarb*2+1);
return aaa+bbb;
}
}
void query(){
int tip, a, b;
for(int i=1; i<=m; i++){
scanf("%d %d %d\n",&tip, &a, &b);
if(tip==0)
tip0(b,a);
else printf("%d\n",tip1(1,k,a,b,1));
}
}
int main(){
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
rez();
query();
return 0;
}