#include <fstream>
using namespace std;
ifstream f{ "datorii.in" };
ofstream q{ "datorii.out" };
int arb[15010 * 4];
int n, m;
void update(int node, int start, int end, int left, int right, int val)
{
if (start > end || start > right || left > end) return;
if (left <= start && end <= right)
{
arb[node] -= val;
return;
}
int mid = (start + end) / 2;
update(node * 2, start, mid, left, right, val);
update(node * 2 + 1, mid + 1, end, left, right, val);
arb[node] = arb[node * 2] + arb[node * 2 + 1];
}
int query(int node, int start, int end, int left, int right)
{
if (start > end || start > right || left > end) return 0;
if (left <= start && end <= right)
{
return arb[node];
}
int mid = (start + end) / 2;
int leftSum = query(node * 2, start, mid, left, right);
int rightSum = query(node * 2 + 1, mid + 1, end, left, right);
return leftSum + rightSum;
}
int main()
{
f >> n >> m;
int x, a, b, op;
for(int i = 1; i <= n; ++i)
{
f >> x;
update(1, 1, n, i, i, -x);
}
for(;m--;)
{
f >> op >> a >> b;
if (op == 0) update(1, 1, n, a, a, b);
else q << query(1, 1, n, a, b)<<"\n";
}
f.close();
q.close();
return 0;
}