//
// Created by Cosmin Dumitru on 09.04.2024.
//
#include <fstream>
using namespace std;
const int N = 15000;
const int L = 17;
int v[N+1], a[1<<(L+1)];
void constructie(int p,int st,int dr){
if (st==dr){
a[p] = v[st];
return;
}
int m = (st+dr)/2,fs = 2*p,fd=2*p+1;
constructie(fs,st,m);//constructie arbore stang;
constructie(fd,m+1,dr);//cel drept
a[p] = max(a[fs],a[fd]);
}
void actualizare(int p,int st,int dr,int poz,int val){
if (st==dr){
a[p] -= val;
return;
}
int m =(st+dr)/2,fs=2*p,fd=2*p+1;
if(poz<=m)
actualizare(fs,st,m,poz,val);
else
actualizare(fd,m+1,dr,poz,val);
a[p] = max(a[fs],a[fd]);
}
int interogare(int x,int st,int dr,int p,int q){
if (st==dr)
return a[x];
//refacem
int m=(st+dr)/2,fs=2*x,fd=2*x+1;
int rez_st = 0, rez_dr =0;
if (p<=m)
rez_st = interogare(fs,st,m,p,q);
if(m+1<=q)
rez_dr = interogare(fd,m+1,dr,p,q);
return rez_st+rez_dr;
}
int main(){
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int n,k,tip;
fin >> n >> k;
for (int i = 1; i <=n; ++i) {
fin >> v[i];
}
constructie(1,1,n);
for (int i = 0; i <k; ++i) {
fin >> tip;
if (!tip){
int ziua,val;
fin >> ziua >> val;
actualizare(1,1,n,ziua,val);
}else{
int p,q;
fin >> p>>q;
fout << interogare(1,1,n,p,q)<<'\n';
}
}
fin.close();
fout.close();
return 0;
}