#include <bits/stdc++.h>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int n, m, x, y;
int datorie[15001], segment_tree[60001];
bool cer;
void build(int node, int l, int r) {
if (l == r) {
segment_tree[node] = datorie[l];
} else {
int mij = (l + r) / 2;
build(node * 2, l, mij);
build(node * 2 + 1, mij + 1, r);
segment_tree[node] = segment_tree[node * 2] + segment_tree[node * 2 + 1];
}
}
int query(int node, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr)return segment_tree[node];
else {
int mij = (l + r) / 2;
if (qr <= mij)return query(node * 2, l, mij, ql, qr);
if (mij + 1 <= ql)return query(node * 2 + 1, mij + 1, r, ql, qr);
return (query(node * 2, l, mij, ql, qr) + query(node * 2 + 1, mij + 1, r, ql, qr));
}
}
void update(int node, int l, int r, int zi, int val) {
if (l == r) segment_tree[node] -= val;
else {
int mij = (l + r) / 2;
if (zi <= mij) update(node * 2, l, mij, zi, val);
else update(node * 2 + 1, mij + 1, r, zi, val);
segment_tree[node] = segment_tree[node * 2] + segment_tree[node * 2 + 1];
}
}
int main() {
in >> n >> m;
for (int i = 1; i <= n; ++i) in >> datorie[i];
//for (int i =1; i <= n; ++i)out<<datorie[i]<<' ';
build(1, 1, n);
for (int i = 0; i < m; ++i) {
in >> cer >> x >> y;
if (cer) {
out << query(1, 1, n, x, y) << '\n';
} else {
update(1, 1, n, x, y);
}
}
return 0;
}