#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 > pozitie || pozitie > dreapta)
return;
if(stanga == dreapta) {
arb[radacina] = valoare;
return;
}
int mijloc = (stanga + dreapta)/2;
Actualizare(2 * radacina, stanga, mijloc, pozitie, valoare);
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 > pozitie || pozitie > dreapta)
return;
if(stanga == dreapta) {
arb[radacina] -= valoare;
return;
}
int mijloc = (stanga + dreapta)/2;
Actualizare2(2 * radacina, stanga, mijloc, pozitie, valoare);
Actualizare2(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 > dreapta || y < stanga)
return 0;
if(x <= stanga && dreapta <= y)
return arb[radacina];
return Interogare(2 * radacina, stanga, (stanga + dreapta) /2 , x, y) +
Interogare(2 * radacina + 1, (stanga + dreapta) /2 + 1, dreapta, x, y);
}
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;
}