#include<iostream>
#include<fstream>
#define DIM 3*15000
using namespace std;
int bani[DIM], sumaRestanta;
void updateElemArboreIntervale(int nod, int st, int dr, int pozDeUpdate, int val) {
if (st == dr) {
bani[nod] = bani[nod] + val;
return;
}
int mij = st + (dr - st) / 2;
if (pozDeUpdate <= mij)
updateElemArboreIntervale(2 * nod, st, mij, pozDeUpdate, val);
else
updateElemArboreIntervale(2 * nod + 1, mij + 1, dr, pozDeUpdate, val);
bani[nod] = bani[2 * nod] + bani[2 * nod + 1];
}
void query(int nod, int st, int dr, int a, int b) {
if (a <= st && b >= dr) {
sumaRestanta = sumaRestanta + bani[nod];
return;
}
int mij = st + (dr - st) / 2;
if (a <= mij) {
query(2 * nod, st, mij, a, b);
}
if (b > mij) {
query(2 * nod + 1, mij + 1, dr, a, b);
}
}
int main()
{
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int N, M, optiune, a, b, suma;
fin >> N >> M;
for (int i = 1; i <= N; i++) {
fin >> suma;
updateElemArboreIntervale(1, 1, N, i, suma);
}
for (int i = 1; i <= M; i++) {
fin >> optiune;
if (optiune) {
fin >> a >> b;
sumaRestanta = 0;
query(1, 1, N, a, b);
fout << sumaRestanta << "\n";
}
else {
fin >> a >> b;
updateElemArboreIntervale(1, 1, N, a, -b); // scadem cat s-a platit din datorie
}
}
return 0;
}