#include<cstdio>
#include<vector>
using namespace std;
int N, M;
vector<int> V(15000 * 3);
void read();
void solve();
void addTree(int node, int left, int right, int pos, int value);
int sumTree(int node, int left, int right, int A, int B);
int main() {
//freopen("input.txt", "r", stdin);
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
read();
solve();
//while (1);
return 0;
}
void read() {
int x, i;
scanf("%d %d", &N, &M);
for (i = 1; i <= N; ++i) {
scanf("%d", &x);
addTree(1, 1, N, i, x);
}
}
void solve() {
int i, c, A, B, x;
for (i = 1; i <= M; ++i) {
scanf("%d %d %d", &c, &A, &B);
if (c == 0) {
addTree(1, 1, N, A, -B);
}
else {
x = sumTree(1, 1, N, A, B);
printf("%d\n", x);
}
}
}
void addTree(int node, int left, int right, int pos, int value) {
if (left == right && left == pos) {
V[node] += value;
return ;
}
int mid;
mid = (left + right) / 2;
if (pos <= mid) {
addTree(node * 2, left, mid, pos, value);
}
else {
addTree(node * 2 + 1, mid + 1, right, pos, value);
}
V[node] = V[node * 2] + V[node * 2 + 1];
}
int sumTree(int node, int left, int right, int A, int B) {
if (A <= left && right <= B){
return V[node];
}
int mid, s1 = 0, s2 = 0;
mid = (left + right) / 2;
if (A <= mid) {
s1 = sumTree(node * 2, left, mid, A, B);
}
if (mid < B) {
s2 = sumTree(node * 2 + 1, mid + 1, right, A, B);
}
return s1 + s2;
}