#include <bits/stdc++.h>
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
const int N = 15001;
int n, m, tree[4 * N];
void update(int node, int left, int right, int index, int val) //
{
if(left == right)
{
tree[node] += val;
return;
}
int mid = (left + right) / 2;
if(index <= mid)
update(node * 2 , left, mid, index, val);
else
update(node * 2 + 1, mid + 1, right, index, val);
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
int query(int node, int left, int right, int _left, int _right)
{
if(_left <= left && right <= _right)
return tree[node];
int mid = (left + right) / 2, Q1 = 0, Q2 = 0;
if(_left <= mid)
Q1 = query(node * 2, left, mid, _left, _right);
if(_right > mid)
Q2 = query(node * 2 + 1, mid + 1, right, _left, _right);
return Q1 + Q2;
}
int main()
{
int i, x, a, b, op;
fin >> n >> m;
for(i = 0; i < n; i++)
{
fin >> x;
update(1, 0, n - 1, i, -x);
}
for(i = 0; i < m; i++)
{
fin >> op >> a >> b;
if(op == 0)
update(1, 0, n - 1, a - 1, b);
else if (op == 1)
fout << -query(1, 0, n - 1, a - 1, b - 1) << '\n';
}
return 0;
}