#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
vector<int> v(15000),arbore(60000);
void construct(int nod,int start,int end)
{int mij;
if(start==end)
{
arbore[nod]=v[start];
return;
}
mij=(start+end)/2;
construct(2*nod,start,mij);
construct(2*nod+1,mij+1,end);
arbore[nod]=arbore[2*nod+1]+arbore[2*nod];
}
int afisare(int nod,int start,int end,int st,int dr)
{
int mij,sumaSt,sumaDr;
if (end<st||dr<start)
return 0;
if(start>=st&&end <= dr)
return arbore[nod];
mij=(start + end)/2;
sumaSt=afisare(2*nod,start,mij,st,dr);
sumaDr=afisare(2*nod+1,mij+1,end,st,dr);
return sumaSt+sumaDr;
}
void plata(int nod,int start,int end,int zi,int nr)
{
if(start==end)
{v[zi]-=nr;
arbore[nod]-=nr;
return;}
int mij=(start+end)/2;
if(zi<=mij)
plata(2*nod,start,mij,zi,nr);
else
plata(2*nod+1, mij+1,end,zi,nr);
arbore[nod]=arbore[2*nod]+arbore[2*nod + 1];
}
int main()
{
int N,M,i,c,x,y;
fin>>N>>M;
for(i=1;i<= N;i++)
{fin>>v[i];}
construct(1,1,N);
for (i=1;i<=M;i++)
{fin>>c>>x>>y;
if(c == 1)
fout<<afisare(1,1,N,x,y)<< '\n';
else
plata(1,1,N,x,y);}
fin.close();
fout.close();
return 0;
}