#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int AINT[4 * 15010], N, solution, op, p, q, v[15010], Q, T, V;
void build(int node, int left, int right, int position, int value)
{
if(left == right)
{
AINT[node] = value;
return;
}
int middle = (left + right) >> 1;
if(position <= middle)
{
build(2 * node, left, middle, position, value);
}
else
{
build(2 * node + 1, middle + 1, right, position, value);
}
AINT[node] = AINT[2 * node] + AINT[2 * node + 1];
}
void update(int node, int left, int right, int position, int value)
{
if(left == right)
{
AINT[node] -= value;
return;
}
int middle = (left + right) >> 1;
if(position <= middle)
{
update(2 * node, left, middle, position, value);
}
else
{
update(2 * node + 1, middle + 1, right, position, value);
}
AINT[node] = AINT[2 * node] + AINT[2 * node + 1];
}
void query(int node,int left, int right, int a, int b)
{
if(a <= left && right <= b)
{
solution += AINT[node];
return;
}
int middle = (left + right) >> 1;
if(a <= middle)
{
query(2 * node, left, middle, a, b);
}
if(b > middle)
{
query(2 * node + 1, middle + 1, right, a, b);
}
}
int main()
{
fin >> N >> Q;
for(int i = 1; i <= N; i ++)
{
fin >> v[i];
build(1, 1, N, i, v[i]);
}
for(int i = 1; i <= Q; i ++)
{
fin >> op;
if(op == 0)
{
fin >> T >> V;
update(1, 1, N, T, V);
}
else
{
solution = 0;
fin >> p >> q;
query(1, 1, N, p, q);
fout << solution << '\n';
}
}
return 0;
}