#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>
#define N 100000
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m;
vector <int> a;
int sol[4 * N + 1];
void creare_arbore(int st, int dr, int nod)
{
if (st != dr)
{
int mij = (st + dr) / 2;
creare_arbore(st, mij, 2 * nod);
creare_arbore(mij + 1, dr, 2 * nod + 1);
sol[nod] = sol[2 * nod] + sol[2 * nod + 1];
}
else sol[nod] = a[st];
}
int answer(int x, int y, int st, int dr, int nod)
{
if (x <= st && dr <= y)
return sol[nod];
else
{
int aux1, aux2, mij = (st + dr) / 2;
if (x <= mij && mij + 1 <= y)
return answer(x, mij, st, mij, 2 * nod) + answer(mij + 1, y, mij + 1, dr, 2 * nod + 1);
else if (x >= mij + 1)
return answer(x, y, mij + 1, dr, 2 * nod + 1);
else if (y <= mij)
return answer(x, y, st, mij, 2 * nod);
}
}
void update(int z, int v, int st, int dr, int nod)
{
if (st == dr)
sol[nod] -= v;
else
{
int mij = (st + dr) / 2;
if (z <= mij)
update(z, v, st, mij, 2 * nod);
else
update(z, v, mij + 1, dr, 2 * nod + 1);
sol[nod] -= v;
}
}
void citire()
{
bool op;
int x, st, dr, z, v;
fin >> n >> m;
a.push_back(0);
for (int i = 1; i <= n; i++)
fin >> x, a.push_back(x);
creare_arbore(1, n, 1);
/*
for(int i = 0; i <= 3; i++, fout << '\n')
for(int j = 1 << i; j < (1 << (i + 1)); j++)
fout << sol[j] << ' ';*/
for (int i = 1; i <= m; i++)
{
fin >> op;
if (!op)
{
fin >> z >> v;
update(z, v, 1, n, 1);
}
else
{
fin >> st >> dr;
fout << answer(st, dr, 1, n, 1) << '\n';
}
}
fin.close();
fout.close();
}
int main()
{
citire();
return 0;
}