#include <iostream>
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int MAX = 15005;
int n, m, x, y, task;
int tree[4 * MAX];
int v[MAX];
void build(int node, int left, int right)
{
if(left == right)
{
tree[node] = v[left];
return;
}
int middle = left + (right - left) / 2;
build(node * 2, left, middle);
build(node * 2 + 1, middle + 1, right);
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
void update(int node, int left, int right, int pos, int val)
{
if(left == right)
{
tree[node] -= val;
return;
}
int middle = left + (right - left) / 2;
if(pos <= middle) update(node * 2, left, middle, pos, val);
else update(node * 2 + 1, middle + 1, right, pos, val);
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
int query(int node, int left, int right, int x, int y)
{
if(left == right)
return tree[node];
int middle = left + (right - left) / 2;
if(y <= middle) return query(node * 2, left, middle, x, y);
if(middle < x) return query(node * 2 + 1, middle + 1, right, x, y);
int sum_st = query(node * 2, left, middle, x, y);
int sum_dr = query(node * 2 + 1, middle + 1, right, x, y);
return sum_st + sum_dr;
}
void read()
{
in >> n >> m;
for(int i = 1; i <= n; ++i)
{
in >> v[i];
}
build(1, 1, n);
for(int i = 1; i <= m; ++i)
{
in >> task >> x >> y;
if(task == 0) update(1, 1, n, x, y);
else out << query(1, 1, n, x, y) << "\n";
}
}
int main()
{
read();
return 0;
}