#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");
vector <long long> Arbore;
vector <int> datorii_initiale;
void Creare_Arbore (int nod , int stanga , int dreapta)
{
if (stanga == dreapta)
Arbore[nod] = datorii_initiale[stanga];
else
{
int mijloc = (stanga + dreapta) / 2;
Creare_Arbore(2 * nod , stanga , mijloc);
Creare_Arbore(2 * nod + 1 , mijloc + 1 , dreapta);
Arbore[nod] = Arbore[2 * nod] + Arbore[2 * nod + 1];
}
}
void Scadere (int nod , int stanga , int dreapta , int pozitie , int valoare)
{
if (stanga == dreapta)
Arbore[nod] -= valoare;
else
{
int mijloc = (stanga + dreapta) / 2;
if (pozitie <= mijloc)
Scadere(2 * nod , stanga , mijloc , pozitie , valoare);
else
Scadere(2 * nod + 1 , mijloc + 1 , dreapta , pozitie , valoare);
Arbore[nod] = Arbore[2 * nod] + Arbore[2 * nod + 1];
}
}
long long Suma (int nod , int stanga , int dreapta , int interval_stanga , int interval_dreapta)
{
if (interval_stanga <= stanga && dreapta <= interval_dreapta)
return Arbore[nod];
int mijloc = (stanga + dreapta) / 2;
long long suma_1 = 0 , suma_2 = 0;
if (interval_stanga <= mijloc)
suma_1 = Suma(2 * nod , stanga , mijloc , interval_stanga , interval_dreapta);
if (interval_dreapta > mijloc)
suma_2 = Suma(2 * nod + 1 , mijloc + 1 , dreapta , interval_stanga , interval_dreapta);
return suma_1 + suma_2;
}
int main ()
{
int lungime , operatii;
cin >> lungime >> operatii;
datorii_initiale.resize(lungime + 1) , Arbore.resize(4 * lungime + 1);
for (int indice = 1 ; indice <= lungime ; indice++)
cin >> datorii_initiale[indice];
Creare_Arbore(1 , 1 , lungime);
int tip , stanga , dreapta;
for (int indice = 1 ; indice <= operatii ; indice++)
{
cin >> tip >> stanga >> dreapta;
if (!tip)
Scadere(1 , 1 , lungime , stanga , dreapta);
else
cout << Suma(1 , 1 , lungime , stanga , dreapta) << '\n';
}
cout.close(); cin.close();
return 0;
}