#include "stdio.h"
#define in "datorii.in"
#define out "datorii.out"
struct tree {
tree *left;
tree *right;
int st;
int dr;
int datorie;
};
tree* updateTree(tree *node, int left, int right, int pos, int value) {
if (node == NULL) {
node = new tree;
node->left = NULL;
node->right = NULL;
node->st = left;
node->dr = right;
node->datorie = 0;
}
if (left==right) {
node->datorie += value;
return node;
}
int mid = (node->st+node->dr)/2;
if (pos<=mid) {
node->left = updateTree(node->left, node->st, mid, pos, value);
} else {
node->right = updateTree(node->right, mid+1, node->dr, pos, value);
}
int left_value = (node->left == NULL) ? 0:node->left->datorie;
int right_value = (node->right == NULL) ? 0:node->right->datorie;
node->datorie = left_value + right_value;
return node;
}
int queryTree(tree *node, int start, int finish) {
if (start<=node->st && node->dr <= finish) {
return node->datorie;
}
int mid = (node->st+node->dr)/2;
int datorie = 0;
if (start <= mid) {
datorie += queryTree(node->left, start, finish);
}
if (mid < finish) {
datorie += queryTree(node->right, start, finish);
}
return datorie;
}
int main() {
freopen(in, "r", stdin);
freopen(out, "w", stdout);
int N,M;
scanf("%d%d", &N, &M);
tree *root = NULL;
int X;
for (int i=1; i<=N; i++) {
scanf("%d", &X);
root = updateTree(root, 1, N, i, X);
}
int o,a,b;
for (int i=1; i<=M; i++) {
scanf("%d%d%d", &o, &a, &b);
if (!o) {
updateTree(root, 1, N, a, -b);
} else {
printf("%d\n", queryTree(root, a, b));
}
}
return 0;
}