#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
vector <int > arb(60005);
void Actualizare(int radacina, int stanga, int dreapta, int pozitie, int valoare)
{
if(stanga == dreapta) {
arb[radacina] = valoare;
return;
}
int mijloc = (stanga + dreapta)/2;
if(pozitie <= mijloc)
Actualizare(2 * radacina, stanga, mijloc, pozitie, valoare);
else
Actualizare(2 * radacina + 1, mijloc + 1, dreapta, pozitie, valoare);
arb[radacina] = arb[2 * radacina] + arb[2 * radacina + 1];
}
void Actualizare2(int radacina, int stanga, int dreapta, int pozitie, int valoare)
{
if(stanga == dreapta) {
arb[radacina] -= valoare;
return;
}
int mijloc = (stanga + dreapta)/2;
if(pozitie <= mijloc)
Actualizare(2 * radacina, stanga, mijloc, pozitie, valoare);
else
Actualizare(2 * radacina + 1, mijloc + 1, dreapta, pozitie, valoare);
arb[radacina] = arb[2 * radacina] + arb[2 * radacina + 1];
}
int Interogare(int radacina, int stanga, int dreapta, int x, int y)
{
if(x <= stanga && dreapta <= y)
return arb[radacina];
int maxim_stanga = 0, maxim_dreapta = 0, mijloc = (stanga + dreapta)/2;
if(x <= mijloc)
maxim_stanga = Interogare(2 * radacina, stanga, mijloc, x, y);
if(mijloc < y)
maxim_dreapta = Interogare(2 * radacina + 1, mijloc + 1, dreapta, x, y);
return maxim_stanga + maxim_dreapta;
}
int main()
{int n, m, x, y, val, i, op;
f>>n>>m;
for(i = 1; i <= n; i++)
{
f >> val;
Actualizare(1, 1, n, i, val);
}
for(i = 1; i <= m; i++)
{
f >> op >> x >> y;
if (!op)
Actualizare2(1, 1, n, x, y);
else
g << Interogare(1, 1, n, x, y) << '\n';
}
return 0;
}