#include <bits/stdc++.h>
#define MAXL 100000
using namespace std;
void update(int *T, int nod, int left, int right, int value, int pos) {
if(left == right) {
T[nod] -= value;
return;
}
int mid = (left + right) / 2;
if(pos <= mid) {
update(T, 2 * nod, left, mid, value, pos);
} else {
update(T, 2 * nod + 1, mid + 1, right, value, pos);
}
T[nod] = T[2 * nod] + T[2 * nod + 1];
}
void query(int *T, int nod, int left, int right, int a, int b, int &sum) {
if(left >= a && right <= b) {
sum += T[nod];
return;
}
int mid = (left + right) / 2;
if(a <= mid) {
query(T, 2 * nod, left, mid, a, b, sum);
}
if(b > mid) {
query(T, 2 * nod + 1, mid + 1, right, a, b, sum);
}
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
int n, m, T[MAXL], x;
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++) {
scanf("%d", &x);
update(T, 1, 1, n, -x, i + 1);
}
int cod, a, b, sum;
for(int i = 0; i < n; i++) {
scanf("%d %d %d", &cod, &a, &b);
if(cod == 0) {
update(T, 1, 1, n, b, a);
} else {
sum = 0;
query(T, 1, 1, n, a, b, sum);
printf("%d\n", sum);
}
}
return 0;
}