#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f1("../datorii.in");
ofstream f2("../datorii.out");
const int MAX_N = 15000;
vector<int> valori(MAX_N + 1);
vector<int> arbore(4 * MAX_N);
void creeaza(int nod, int start, int final) {
if (start == final) {
arbore[nod] = valori[start];
return;
}
int mid = (start + final) / 2;
creeaza(2 * nod, start, mid);
creeaza(2 * nod + 1, mid + 1, final);
arbore[nod] = arbore[2 * nod] + arbore[2 * nod + 1];
}
void update(int nod, int start, int final, int idx, int valoare) {
if (start == final) {
valori[idx] += valoare;
arbore[nod] += valoare;
return;
}
int mid = (start + final) / 2;
if (idx <= mid)
update(2 * nod, start, mid, idx, valoare);
else
update(2 * nod + 1, mid + 1, final, idx, valoare);
arbore[nod] = arbore[2 * nod] + arbore[2 * nod + 1];
}
int interog(int node, int start, int final, int stanga, int dreapta) {
if (start > dreapta || final < stanga)
return 0;
if (start >= stanga && final <= dreapta)
return arbore[node];
int mid = (start + final) / 2;
int suma_stanga = interog(2 * node, start, mid, stanga, dreapta);
int suma_dreapta = interog(2 * node + 1, mid + 1, final, stanga, dreapta);
return suma_stanga + suma_dreapta;
}
int main() {
int N, M;
f1 >> N >> M;
for (int i = 1; i <= N; i++) {
f1 >> valori[i];
}
creeaza(1, 1, N);
for (int i = 1; i <= M; i++) {
int op, x, y;
f1 >> op >> x >> y;
if (op == 0) {
update(1, 1, N, x, -y);
} else {
int sum = interog(1, 1, N, x, y);
f2 << sum << "\n";
}
}
f1.close();
f2.close();
return 0;
}