#include <bits/stdc++.h>
using namespace std;
const int N=15000;
int aint[4*N+1],v[15001];
void build(int nod,int l,int r){
if(l>r)
return;
if(l==r){
aint[nod]=v[l];
return;
}
int mid=(l+r)/2;
build(2*nod,l,mid);
build(2*nod+1,mid+1,r);
aint[nod]=aint[2*nod]+aint[nod*2+1];
}
void update(int nod,int l,int r,int poz,int val){
if(l>r || l>poz || r<poz)
return;
if(l==r)
{
aint[nod]=max(aint[nod]-val,0);
return;
}
int mid=(l+r)/2;
update(2*nod,l,mid,poz,val);
update(2*nod+1,mid+1,r,poz,val);
aint[nod]=aint[2*nod]+aint[nod*2+1];
}
int query(int nod,int l,int r,int ql,int qr){
if(l>r || l>qr || r<ql)
return 0;
if(ql<=l && r<=qr)
return aint[nod];
int mid=(l+r)/2;
int a=query(2*nod,l,mid,ql,qr);
int b=query(2*nod+1,mid+1,r,ql,qr);
return a+b;
}
int main()
{
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int n,m,i,poz,val,cer,x,y;
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>v[i];
build(1,1,n);
for(i=1;i<=m;i++){
cin>>cer;
if(cer==0){
cin>>poz>>val;
update(1,1,n,poz,val);
}
else{
cin>>x>>y;
cout<<query(1,1,n,x,y)<<'\n';
}
}
return 0;
}