// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
using namespace std;
const int NMAX=15e3;
int aint[4*NMAX+1];
int a[NMAX+1];
int ans=0;
void build(int node,int l,int r){
if(l==r){
aint[node]=a[l];
}else{
int mid=(l+r)/2;
build(2*node,l,mid);
build(2*node+1,mid+1,r);
aint[node]=aint[2*node]+aint[2*node+1];
}
}
void update(int node,int l,int r,int pos,int val){
if(l==r){
aint[node]=max(0,aint[node]-val);
//cout<<pos<<" "<<aint[node]<<"\n";
}else{
int mid=(l+r)/2;
if(mid>=pos){
update(2*node,l,mid,pos,val);
}
if(mid<pos){
update(2*node+1,mid+1,r,pos,val);
}
aint[node]=aint[2*node]+aint[2*node+1];
}
}
void query(int node,int l,int r,int &st,int &dr){
if(r < st || dr < l){
return;
}
if(l >= st && r <= dr){
ans += aint[node];
return;
}
int mid=(l+r)/2;
query(2*node,l,mid,st,dr);
query(2*node+1,mid+1,r,st,dr);
}
int main() {
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
for(int i=0;i<m;i++){
int t,x,y;
cin>>t>>x>>y;
if(t){
ans=0;
query(1,1,n,x,y);
//cout<<x<<" "<<y;
cout<<ans<<'\n';
}else{
update(1,1,n,x,y);
}
}
}