#include <iostream>
#include<fstream>
# define N 100005
#include<algorithm>
#include<iomanip>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m, a[N];
struct nod
{
int info;
nod* urm1;
nod* urm2;
};
nod* radacina;
void creare(nod* radacina, int st, int dr)
{
if(st == dr)
{
radacina -> info = a[st];
return;
}
int mij = (st + dr)/2;
radacina -> urm1 = new nod;
radacina -> urm2 = new nod;
creare(radacina ->urm1 , st, mij);
creare(radacina ->urm2 , mij + 1, dr);
radacina -> info = radacina -> urm1 -> info + radacina -> urm2 -> info;
}
int raspuns(nod* radacina, int st, int dr, int x, int y)
{
if(x <= st && y >= dr)
return radacina -> info;
int mij = (st + dr) / 2;
if(y <= mij)
return raspuns(radacina -> urm1, st, mij, x, y);
if(x > mij)
return raspuns(radacina -> urm2, mij + 1, dr, x, y);
return raspuns(radacina -> urm1, st, mij, x, mij) + raspuns(radacina -> urm2, mij + 1, dr, mij + 1, y);
}
void schimba(nod* radacina ,int st, int dr, int x, int y)
{
if(st == dr)
{
a[x] -= y;
radacina -> info = a[x];
return;
}
int mij = (st + dr) / 2;
if(x <= mij)
schimba(radacina -> urm1, st, mij, x, y);
else if(x > mij)
schimba(radacina -> urm2, mij + 1, dr, x, y);
radacina -> info = radacina -> urm1 -> info + radacina -> urm2 -> info;
}
int main()
{
int i, x, y, task;
fin >> n >> m;
for(i = 1; i <= n ;++i)
fin >> a[i];
radacina = new nod;
creare(radacina, 1, n);
for(i = 1; i <= m; ++i)
{
fin >> task >> x >> y;
if(task == 1)
fout << raspuns(radacina, 1, n, x, y) << "\n";
else
schimba(radacina, 1, n, x, y);//din x cu val y
}
}