# include <bits/stdc++.h>
using namespace std;
const int Nmax = 15000 + 5;
int n, m, i, op, a, b, v[Nmax], arb[Nmax * 4];
void build (int node, int left, int right)
{
if (left == right)
{
arb[node] = v[left];
return ;
}
int mid = (left + right) / 2;
build (node * 2, left, mid);
build (node * 2 + 1, mid + 1, right);
arb[node] = arb[node * 2] + arb[node * 2 + 1];
}
void achit (int node, int left, int right, int pos, int val)
{
if (left == right)
{
arb[node] -= val;
return ;
}
int mid = (left + right) / 2;
if (pos <= mid) achit (node * 2, left, mid, pos, val);
else achit (node * 2 + 1, mid + 1, right, pos, val);
arb[node] = arb[node * 2] + arb[node * 2 + 1];
}
int query (int node, int left, int right, int a, int b)
{
if (a <= left && right <= b) return arb[node];
int mid = (left + right) / 2;
int sum = 0;
if (a <= mid) sum += query (node * 2, left, mid, a, b);
if (b > mid) sum += query (node * 2 + 1, mid + 1, right, a, b);
return sum;
}
int main ()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %d\n", &n, &m);
for (i = 1; i <= n; ++i)
scanf("%d ", &v[i]);
build (1, 1, n);
for (i = 1; i <= m; ++i)
{
scanf("%d %d %d\n", &op, &a, &b);
if (!op) achit(1, 1, n, a, b);
else printf("%d\n", query(1, 1, n, a, b) );
}
return 0;
}