#include<fstream>
#include<iostream>
using namespace std;
int A[15001];
int tree[4*15000+1];
void build(int node, int a, int b) {
if (a == b) {
tree[node] = A[a];
return;
}
int mid = (a+b)/2;
build(node*2, a, mid);
build(node*2+1, mid+1, b);
tree[node] = tree[node*2] + tree[node*2+1];
}
void achit(int zi, int val, int st, int dr, int node) {
if (st == dr) {
tree[node] -= val;
return;
}
int mid = (st+dr)/2;
if (zi <= mid) achit(zi, val, st, mid, node*2);
else achit(zi, val, mid+1, dr, node*2+1);
tree[node] = tree[node*2] + tree[node*2+1];
}
int suma(int from, int to, int st, int dr, int node) {
if (from <= st && to >= dr) {
return tree[node];
}
int mid = (st+dr)/2;
if (to <= mid) return suma(from, to, st, mid, node*2);
if (from >= mid+1) return suma(from, to, mid+1, dr, node*2+1);
return suma(from, to, st, mid, node*2) + suma(from, to, mid+1, dr, node*2+1);
}
int main() {
ifstream f("datorii.in");
ofstream g("datorii.out");
int N, M;
f >> N >> M;
for (int i = 1; i <= N; i++) {
f >> A[i];
}
build(1, 1, N);
int opt, a, b;
for (int i = 0; i < M; i++) {
f >> opt >> a >> b;
if (opt == 0) achit(a, b, 1, N, 1);
else g << suma(a, b, 1, N, 1) << "\n";
}
f.close();
g.close();
return 0;
}