#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int noduri[4000001], valori[1000001];
void valoareNod(int nod, int st, int dr)
{
if (st == dr)
{
noduri[nod] = valori[st];
return;
}
int mij = (st + dr) / 2;
valoareNod(nod * 2, st, mij);
valoareNod(nod * 2 + 1, mij + 1, dr);
noduri[nod] = noduri[2 * nod] + noduri[2 * nod + 1];
}
int valSuma(int indiceNod, int st, int dr, int val1, int val2)
{
if (val2 < st || dr < val1) return 0;
if (val1 <= st && dr <= val2) return noduri[indiceNod];
int mij = (st + dr) / 2;
return valSuma(2 * indiceNod, st, mij, val1, val2) +
valSuma(2 * indiceNod + 1, mij + 1, dr, val1, val2);
}
void modificareNod(int indiceNod, int st, int dr, int valInitiala, int valAchitata)
{
if (valInitiala < st || valInitiala > dr) return;
if (st == dr)
{
noduri[indiceNod] -= valAchitata;
return;
}
int mij = (st + dr) / 2;
modificareNod(indiceNod * 2, st, mij, valInitiala, valAchitata);
modificareNod(indiceNod * 2 + 1, mij + 1, dr, valInitiala, valAchitata);
noduri[indiceNod] = noduri[indiceNod * 2] + noduri[indiceNod * 2 + 1];
}
int main()
{
int nrElemente, nrOperatii;
fin >> nrElemente >> nrOperatii;
for (int i = 1; i <= nrElemente; i++)
fin >> valori[i];
valoareNod(1, 1, nrElemente);
for (int i = 1; i <= nrOperatii; i++)
{
int operatie; fin >> operatie;
int a, b; fin >> a >> b;
switch (operatie)
{
case 1:
fout << valSuma(1, 1, nrElemente, a, b) << '\n';
break;
case 0:
modificareNod(1, 1, nrElemente, a, b);
break;
}
}
}