#include <fstream>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int v[100005], aint[100005];
void init (int l, int r, int nod)
{
if (l == r)
{
aint[nod] = v[l];
return;
}
int m = (l + r) / 2;
init(l, m, 2 * nod);
init(m + 1, r, 2 * nod + 1);
aint[nod] = aint[2 * nod]+ aint[2 * nod + 1];
}
void upd (int l, int r, int poz, int val, int nod)
{
if (l == r)
{
aint[nod]+= val;
return;
}
int m = (l + r) / 2;
if (poz <= m)
{
upd(l, m, poz, val, 2 * nod);
}
else
{
upd(m + 1, r, poz, val, 2 * nod + 1);
}
aint[nod] = aint[2 * nod]+aint[2 * nod + 1];
}
int qry (int l, int r, int st, int dr, int nod)
{
if (st <= l && r <= dr)
{
return aint[nod];
}
int m = (l + r) / 2;
if (st <= m)
{
if(dr>m) return qry(l, m, st, dr, 2 * nod)+qry(m+1, r, st, dr, 2 * nod+1);
else
return qry(l, m, st, dr, 2 * nod);
}
else
return qry(m+1, r, st, dr, 2 * nod+1);
}
int main ()
{
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
fin >> v[i];
}
init(1, n, 1);
for(int i=1;i<=m;i++)
{
int op, x, y;
fin >> op >> x >> y;
if (op == 1)
{
fout << qry(1, n, x, y, 1) << '\n';
}
else
{
upd(1, n, x, -y, 1);
}
}
}