#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
vector<int> segm_tree(50005);
vector<int> val(15005);
void build(int node, int left, int right) {
if (left == right) {
segm_tree[node] = val[left];
}
else {
int mij = (left + right) / 2;
build(node * 2, left, mij);
build(node * 2 + 1, mij+1, right);
segm_tree[node] = (segm_tree[node * 2]+ segm_tree[node * 2 + 1]);
}
}
void update(int node, int left, int right, int pos, int new_val) {
if (left == right) {
segm_tree[node] -= new_val;
}
else {
int mij = (left + right) / 2;
if (pos <= mij) {
update(node*2,left,mij,pos,new_val);
}
else {
update(node * 2+1, mij+1, right, pos, new_val);
}
segm_tree[node] = (segm_tree[node * 2]+ segm_tree[node * 2 + 1]);
}
}
int query(int node, int left, int right, int left_q, int right_q) {
if (left_q <= left && right <= right_q) {
return segm_tree[node];
}
else {
int mij = (left + right) / 2;
if (right_q <= mij) {
return query(node * 2, left, mij, left_q, right_q);
}
if(mij+1<=left_q) {
return query(node * 2 + 1, mij + 1, right, left_q, right_q);
}
return (query(node * 2, left, mij, left_q, right_q)+query(node * 2 + 1, mij + 1, right, left_q, right_q));
}
}
int main() {
int n, m;
fin >> n>>m ;
for (int i = 1; i <= n; i++) {
fin >> val[i];
}
build(1, 1, n);
int t,a ,b;
for (int i = 1; i <= m; i++) {
fin >> t;
if (t == 1) {
fin >> a >> b;
fout << query(1, 1, n, a, b)<<'\n';
}
else {
fin >> a >> b;
update(1, 1, n , a, b);
}
}
return 0;
}