#include <iostream>
#include <fstream>
#define MAXN 15001
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int arbInt[5 * MAXN];
int querryAns = 0;
void update(int node, int pos, int value, int left, int right) {
if (left == right) {
arbInt[node] += value;
return;
}
int mid = (left + right) / 2;
if (pos <= mid) {
update(2 * node, pos, value, left, mid);
} else {
update(2 * node + 1, pos, value, mid + 1, right);
}
arbInt[node] = arbInt[2 * node] + arbInt[2 * node + 1];
}
void querry(int node, int left, int right, int start, int finish) {
if (start <= left && right <= finish) {
querryAns += arbInt[node];
return;
}
int mid = (left + right) / 2;
if (start <= mid) {
querry(2 * node, left, mid, start, finish);
}
if (mid < finish) {
querry(2 * node + 1, mid + 1, right, start, finish);
}
}
int main()
{
int N, M, debt, op;
f >> N >> M;
for (int i = 1; i <= N; ++i) {
f >> debt;
update(1, i, debt, 1, N);
}
for (int i = 1; i <= M; ++i) {
f >> op;
if (op == 0) {
int cash, day;
f >> day >> cash;
update(1, day, -cash, 1, N);
} else {
int startDay, finishDay;
f >> startDay >> finishDay;
querryAns = 0;
querry(1, 1, N, startDay, finishDay);
g << querryAns << '\n';
}
}
return 0;
}