#include<stdio.h>
int n, m, a, poz, elem, suma, stanga, dreapta, elem;
int arbore[150005];
void restabilire_arbore(int st, int dr, int pozitie)
{
arbore[pozitie] = arbore[pozitie] + elem;
if(st==dr) return;
int mijloc = (st + dr) / 2;
if(poz <= mijloc)
//daca pozitia elementului cautat e mai mica decat mijlocul
//restabilesc partea stanga a subarborelui
restabilire_arbore(st, mijloc, 2 * pozitie);
//altfel restabilesc partea dreapta a subarborelui
else restabilire_arbore(mijloc + 1, dr, 2 * pozitie + 1);
}
void interogare(int st, int dr, int pozitie)
{
//cat timp nu am depasit capetele
if(stanga<= st && dr <= dreapta)
{
//calculez suma pe intervalul cerut
suma = suma + arbore[pozitie];
return;
}
//altfel ma mut in subarborele drept , respectiv stang pentru care calculez ulterior suma
int mijloc = (st + dr) / 2;
if(stanga <= mijloc)
interogare(st, mijloc, 2 * pozitie);
if(dreapta > mijloc)
interogare(mijloc + 1, dr, 2 * pozitie + 1);
}
int main()
{
FILE *f = fopen("datorii.in", "r+");
FILE *g = fopen("datorii.out", "w+");
fscanf(f, "%d%d", &n,&m);
for(int i = 1; i<= n; i++)
{
fscanf(f, "%d", &a);
poz = i;
elem = a;
restabilire_arbore(1, n, 1);
}
int cod, x, y;
for(int i = 1; i <= m; i++)
{
fscanf(f, "%d%d%d", &cod, &x, &y);
if(cod == 0)
{
poz = x;
//scad din valoarea initiala suma de bani care a fost restituita
elem = (-1) * y;
restabilire_arbore(1, n, 1);
}
else
{
suma = 0;
stanga = x;
dreapta = y;
interogare(1, n, 1);
fprintf(g, "%d\n", suma);
}
}
return 0;
}