#include <iostream>
#include <fstream>
#define NMAX 60005
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int n, m, a[NMAX];
void build (int node, int left, int right) {
if (left == right) {
fin >> a[node];
}
else {
int mid = (left + right) / 2;
build(node * 2, left, mid);
build(node * 2 + 1, mid+1, right);
a[node] = a[node * 2] + a[node * 2 + 1];
}
}
void reduce (int node, int left, int right, int poz, int val) {
if (left == right && left == poz) {
a[node] -= val;
}
else {
int mid = (left + right) / 2;
if (poz <= mid) {
reduce(node * 2, left, mid, poz, val);
}
else {
reduce(node * 2 + 1, mid + 1, right, poz, val);
}
a[node] = a[node * 2] + a[node * 2 + 1];
}
}
int query (int node, int left, int right, int x, int y) {
if (x <= left && right <= y) {
return a[node];
}
else {
int mid = (left + right) / 2;
if (mid < x) {
return query(node * 2 + 1, mid+1, right, x, y);
}
else
if (y <= mid) {
return query(node * 2, left, mid, x, y);
}
return (query(node *2, left, mid, x, y) + query(node * 2 + 1, mid+1, right, x, y));
}
}
int main ()
{
fin >> n >> m;
build(1,1,n);
int p, x, y;
for (int t = 1; t <= m; ++t) {
fin >> p >> x >> y;
if (p == 0) {
reduce(1,1,n,x,y);
}
else {
fout << query(1,1,n,x,y) << '\n';
}
}
return 0;
}