#include <bits/stdc++.h>
using namespace std;
#define NMAX 15005
#define middle (left + right) / 2
int tree[NMAX * 5], v[NMAX], n, m;
void constructor(int pos, int left, int right) {
if(left == right) {
tree[pos] = v[left];
} else {
constructor(2 * pos, left, middle);
constructor(2 * pos + 1, middle + 1, right);
tree[pos] = tree[2 * pos] + tree[2 * pos + 1];
}
}
void update(int pos, int left, int right, int loc, int val) {
if(left == right) {
tree[pos] = val;
} else {
if(loc <= middle) {
update(pos * 2, left, middle, loc, val);
} else {
update(pos * 2 + 1, middle + 1, right, loc, val);
}
tree[pos] = tree[2 * pos] + tree[2 * pos + 1];
}
}
int query(int pos, int left, int right, int leftInt, int rightInt) {
int ans = 0;
if(leftInt <= left && right <= rightInt) {
return tree[pos];
}
if(leftInt <= middle) {
ans += query(pos * 2, left, middle, leftInt, rightInt);
}
if(rightInt - 1 >= middle) {
ans += query(pos * 2 + 1, middle + 1, right, leftInt, rightInt);
}
return ans;
}
int main() {
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) {
scanf("%d", &v[i]);
}
constructor(1, 1, n);
for(int i = 1; i <= m; i++) {
int ty, x, y;
scanf("%d%d%d", &ty, &x, &y);
if(!ty) {
v[x] -= y;
update(1, 1, n, x, v[x]);
} else {
printf("%d\n", query(1, 1, n, x, y));
}
}
return 0;
}