#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m;
int arb[60004];
int A[15001];
void Arb(int poz, int st, int dr)
{
if(st==dr) //sunt pe frunza
{
arb[poz]=A[st];
return;
}
else
{
int mijl=(st+dr)/2;
Arb(poz*2,st,mijl);
Arb(poz*2+1,mijl+1,dr);
arb[poz]=arb[poz*2]+ arb[poz*2+1];
}
}
int Suma(int poz, int pozstart, int pozfinal, int st,int dr) //pozstart, pozfinal- pentru intervalul cautat; st,dr- pentru intervalul nodului curent
{
if(st>=pozstart && dr<=pozfinal) //cu totul in interiorul intervalului
return arb[poz];
if(pozstart>dr || st>pozfinal) //cu totul in afara intervalului
return 0; //0 element neutru la suma
int mijl=(st+dr)/2;
int val1=Suma(2*poz, pozstart, pozfinal, st, mijl);
int val2=Suma(2*poz+1, pozstart, pozfinal, mijl+1, dr);
return val1+val2;
}
void Achitare(int poznod, int pozupdate,int val, int st, int dr) // st, dr- pentru intervalul nodului curent
{
if(st==dr)
{
arb[poznod]-=val;
return;
}
else
{
int mijl=(st+dr)/2;
if(pozupdate<=mijl)
Achitare(poznod*2, pozupdate, val, st, mijl);
else
Achitare(poznod*2+1, pozupdate, val, mijl+1, dr);
arb[poznod]=arb[poznod*2]+ arb[poznod*2+1];
}
}
int main()
{
int task,a,b;
fin>>n>>m;
for(int i=1; i<=n; ++i)
fin>>A[i];
Arb(1,1,n); //radacina pe pozitia 1
for(int i=0; i<m; ++i)
{
fin>>task>>a>>b;
if(task==0) //achitare, la ziua a se scad b bani
Achitare(1,a,b,1,n);
else
fout<<Suma(1,a,b,1,n)<<"\n";
}
return 0;
}