#include <iostream>
#include <fstream>
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
int arb[15000 * 4], n;
void create(int nod, int st, int dr)
{
// creez in O(n)
if (st == dr)
{
fin >> arb[nod];
}
else
{
int mid = st + (dr - st) / 2;
create(nod * 2 + 1, st, mid);
create(nod * 2 + 2, mid + 1, dr);
arb[nod] = arb[nod * 2 + 1] + arb[nod * 2 + 2];
}
}
void update(int nod, int st, int dr, int poz, int val)
{
if (st == dr)
{
arb[nod] -= val;
}
else
{
int mid = st + (dr - st) / 2;
if (poz <= mid)
{
update(nod * 2 + 1, st, mid, poz, val);
}
else
{
update(nod * 2 + 2, mid + 1, dr, poz, val);
}
arb[nod] = arb[nod * 2 + 1] + arb[nod * 2 + 2];
}
}
void query(int nod, int st, int dr, int x, int y, int& rez)
{
if (st >= x && dr <= y)
rez += arb[nod];
else
{
int mid = st + (dr - st) / 2;
if (mid >= x)
query(nod * 2 + 1, st, mid, x, y, rez);
if (mid < y) // mid+1 <= y
query(nod * 2 + 2, mid + 1, dr, x, y, rez);
}
}
int main()
{
int n, m, tip, x, y;
fin >> n >> m;
create(0, 0, n - 1);
for (int i = 0; i < m; ++i)
{
fin >> tip >> x >> y;
if (tip == 0)
update(0, 0, n - 1, x-1, y); // -1 ca e indexat de la 0
else
{
int rez = 0;
query(0, 0, n - 1, x-1, y-1, rez);
fout << rez << '\n';
}
}
}