#include <fstream>
#define oo 2e9
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
struct Nod
{
int info;
Nod *st, *dr;
};
int v[15002];
Nod *node;
void Creare(Nod *&node, int st, int dr)
{
node = new Nod;
if(st == dr)
node -> info = v[st];
else
{
int mij = st + (dr - st) / 2;
Creare(node -> st, st, mij);
Creare(node -> dr, mij + 1, dr);
node -> info = node -> st -> info + node -> dr -> info;
}
}
void Actualizare(Nod *&node, int st, int dr, int val)
{
if(val == st && st == dr)
node -> info = v[st];
else
{
int mij = st + (dr - st) / 2;
if(val <= mij)
Actualizare(node -> st, st, mij, val);
else Actualizare(node -> dr, mij + 1, dr, val);
node -> info = node -> st -> info + node -> dr -> info;
}
}
int Find(Nod *node, int x, int y, int st, int dr)
{
if(x == y)
return v[x];
int mij = st + (dr - st) / 2;
if(x <= st && dr <= y)
return node -> info;
if(y < st || x > dr)
return 0;
if(y <= mij)
return Find(node -> st, x, y, st, mij);
if(x > mij)
return Find(node -> dr, x, y, mij + 1, dr);
return Find(node -> st, x, mij, st, mij) + Find(node -> dr, mij + 1, y, mij + 1, dr);
}
int main()
{
int n, m, i, x, y, task;
fin >> n >> m;
for(i = 1; i <= n; i++)
fin >> v[i];
Creare(node, 1, n);
for(i = 1; i <= m; i++)
{
fin >> task >> x >> y;
if(task == 0)
{
v[x] -= y;
Actualizare(node, 1, n, x);
}
else
{
fout << Find(node, x, y, 1, n) << "\n";
}
}
return 0;
}