#include<fstream>
#define M ((l+r)/2)
using namespace std;
const int maxn = 15020;
int a[maxn],h[maxn*2],n,m;
void create(int l=1,int r=n, int nod =1){
if(l==r){
h[nod]=a[l];return;
}
// int m = (l+r)/2;
create(l,M,2*nod);
create(M+1,r,nod*2+1);
h[nod]=h[nod*2]+h[nod*2+1];
}
void update(int pos,int v,int l=1,int r=n, int nod=1){
if(r==l){
h[nod]-=v;return;
}
//int m =(l+r)/2;
if(pos <= M) update(pos,v,l,M,nod*2);
else update(pos,v,M+1,r,nod*2+1);
h[nod]=h[nod*2]+h[nod*2+1];
}
int fmax(int a,int b,int l=1,int r=n,int nod=1){
if (a>r || b<l )return 0;
if(a<=l && b>=r)return h[nod];
//int m =(l+r)/2;
return fmax(a,b,l,M,nod*2)+fmax(a,b,M+1,r,nod*2+1);
}
main(){
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
int x,y,z,i;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
create();
// for(i=1;i<=n;i++)printf("%d ",a[i]);
// printf("\n");
// for(i=1;i<=n*2-1;i++)printf("%d ",h[i]);
for(i=1;i<=m;i++){
scanf("%d %d %d",&x,&y,&z);
if(x==1){
printf("%d\n",fmax(y,z));
}else{
update(y,z);
}
}
}