#include <cstdio>
using namespace std;
int a,b,poz,val;
int t[1<<18];
int maxim(int x,int y) {
return x+y;
}
int query(int p, int st, int dr) {
if (a<=st && dr<=b)
return t[p];
int m=(st+dr)/2,m1=0,m2=0;
if(a<=m) m1=query(2*p,st,m);
if(m+1<=b) m2=query(2*p+1,m+1,dr);
return maxim(m1,m2);
}
void update(int p,int st,int dr) {
if (st==dr) {
t[p]=t[p]-val;
return;
}
int m=(st+dr)/2;
if (poz<=m) update(2*p,st,m);
else update(2*p+1,m+1,dr);
t[p]=maxim(t[2*p],t[2*p+1]);
}
int main() {
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
int n,m,i,j,k,x,y,z;
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++) {
scanf("%d",&k);
poz=i;
val=-k;
update(1,1,n);
}
for(i=1; i<=m; i++) {
scanf("%d%d%d",&x,&y,&z);
if (x==0) {
poz=y;
val=z;
update(1,1,n);
} else {
a = y;
b = z;
x=query(1,1,n);
printf("%d\n",x);
}
}
return 0;
}