#include <iostream>
#include<fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int theResultArray[90001];
int theArray[15001];
void doInterval(int st, int dr, int index){
if(st == dr)
{theResultArray[index] = theArray[st];
return ;
}
int med = (st + dr) / 2;
doInterval(st, med, index * 2 + 1);
doInterval(med + 1, dr, index * 2 + 2);
theResultArray[index] = theResultArray[index * 2 + 1] + theResultArray[index * 2 + 2];
}
void scadereDinInterval(int st, int dr, int wantedPos, int wantedVal, int index){
if( st > wantedPos || dr < wantedPos)
{
return ;
}
if(st == dr && wantedPos == st){
theResultArray[index] -= wantedVal;
return ;
}
int med = (st + dr) / 2;
scadereDinInterval(st, med, wantedPos, wantedVal, index * 2 + 1);
scadereDinInterval(med + 1, dr, wantedPos, wantedVal, index * 2 + 2);
theResultArray[index] = theResultArray[index * 2 + 1] + theResultArray[index * 2 + 2];
}
int getSumInInterval(int st, int dr, int wantedLeft, int wantedRight, int index)
{
if(st > wantedRight || dr < wantedLeft)
return 0;
if(wantedLeft <= st && wantedRight >= dr)
return theResultArray[index];
int med = (st + dr) / 2;
return getSumInInterval(st, med , wantedLeft, wantedRight, index * 2 + 1) + getSumInInterval(med + 1, dr, wantedLeft, wantedRight, index * 2 + 2);
}
int main()
{
int n,operations;
fin>>n>>operations;
for(int i = 0; i < n; i++)
{
fin>>theArray[i];
}
doInterval(0,n - 1, 0);
for(int i = 0; i < operations; i++)
{
int op, l, r;
fin>>op>>l>>r;
--l;
if(op == 0)
{
// operatia de scadere
scadereDinInterval(0, n - 1, l, r, 0);
}
else{
-- r;
fout<<getSumInInterval(0,n - 1, l, r, 0)<<"\n";
}
}
fin.close();
fout.close();
return 0;
}