#include <iostream>
#include<fstream>
#define N 15005
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int a[N], n, m;
int h[N];//heapul
void creare(int radacina, int st, int dr)
{
if(st == dr)
{
h[radacina] = a[st];
return;
}
int mij = (st + dr)/2;
creare(2 * radacina, st, mij);
creare(2 * radacina + 1, mij + 1, dr);
h[radacina] = h[2 * radacina] + h[2 * radacina + 1];
//cout << radacina << " " << h[radacina] <<"\n";
}
int afisare(int radacina, int st, int dr, int x, int y)
{
if(x <= st && y >= dr)return h[radacina];
int mij = (st + dr) / 2;
if(y <= mij)return afisare(2 * radacina, st, mij, x, y);
if(x > mij)return afisare(2 * radacina + 1, mij + 1, dr, x, y);
return afisare(2 * radacina, st, mij, x, mij) + afisare(2 * radacina + 1, mij + 1, dr, mij + 1, dr);
}
void schimba(int radacina, int st, int dr, int x, int y)
{
if(st == dr)
{
h[radacina] -= y;
return;
}
int mij = (st + dr) / 2;
if(y <= mij)schimba(2 * radacina, st, mij, x, y);
if(x > mij)schimba(2 * radacina + 1, mij + 1, dr, x, y);
h[radacina] = h[2 * radacina] + h[2 * radacina + 1];
}
int main()
{
int i, task, x, y;
fin >> n >> m;
for(i = 1; i <= n; ++i)
fin >> a[i];
creare(1, 1, n);
for(i = 1; i <= m; ++i)
{
fin >> task >> x >> y;
if(task == 1)
fout << afisare(1, 1, n, x, y) << "\n";
else
schimba(1, 1, n, x, y);
}
return 0;
}