#include <iostream>
#include <fstream>
#define nl '\n'
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int NMAX = 15005;
int n, v[NMAX], aint[4*NMAX];
void build(int node, int low, int high)
{
if (low == high)
{
aint[node] = v[low];
return;
}
int mid = (low+high)>>1;
build(2*node, low, mid);
build(2*node+1, mid+1, high);
aint[node] = aint[2*node]+aint[2*node+1];
return;
}
void update(int node, int low, int high, int poz, int val)
{
if (low == high)
{
aint[node]+=val;
return;
}
int mid = (low+high)>>1;
if (poz <= mid)
update(2*node, low, mid, poz, val);
if (mid+1 <= poz)
update(2*node+1, mid+1, high, poz, val);
aint[node] = aint[2*node]+aint[2*node+1];
return;
}
int query(int node, int low, int high, int a, int b)
{
if (a <= low && high <= b)
return aint[node];
int mid = (low+high)>>1, t1 = 0, t2 = 0;
if (a <= mid)
t1 = query(2*node, low, mid, a, b);
if (mid+1 <= b)
t2 = query(2*node+1, mid+1, high, a, b);
return t1+t2;
}
int main()
{
int t;
fin >> n >> t;
for (int i = 1; i <= n; i++)
fin >> v[i];
build(1, 1, n);
while (t--)
{
int c, x, y;
fin >> c >> x >> y;
if (c == 0)
update(1, 1, n, x, -y);
if (c == 1)
fout << query(1, 1, n, x, y) << nl;
}
return 0;
}