#include <bits/stdc++.h>
using namespace std;
const int MAXN = 15005;
int N, M;
int A[MAXN];
int tree[4 * MAXN];
void build(int node, int l, int r) {
if (l == r) {
tree[node] = A[l];
return;
}
int mid = (l + r) / 2;
build(node * 2, l, mid);
build(node * 2 + 1, mid + 1, r);
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
void update(int node, int l, int r, int pos, int val) {
if (l == r) {
tree[node] -= val;
return;
}
int mid = (l + r) / 2;
if (pos <= mid) update(node * 2, l, mid, pos, val);
else update(node * 2 + 1, mid + 1, r, pos, val);
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
int query(int node, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) return tree[node];
int mid = (l + r) / 2;
int sum = 0;
if (ql <= mid) sum += query(node * 2, l, mid, ql, qr);
if (qr > mid) sum += query(node * 2 + 1, mid + 1, r, ql, qr);
return sum;
}
int main()
{
ifstream fin("datorii.in");
ofstream fout("datorii.out");
fin >> N >> M;
for (int i = 1; i <= N; i++) fin >> A[i];
build(1, 1, N);
for (int i = 0; i < M; i++) {
int cod, x, y;
fin >> cod >> x >> y;
if (cod == 0) update(1, 1, N, x, y);
else fout << query(1, 1, N, x, y) << "\n";
}
return 0;
}