#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int Nmax = 1e5 + 5;
int aint[4 * Nmax], v[Nmax];
void build( int nod, int st, int dr )
{
if ( st == dr )
{
aint[nod] = v[st];
return ;
}
int mij = (st + dr) / 2;
build(2 * nod, st, mij);
build(2 * nod + 1, mij + 1, dr);
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
//fout << "st = " << st << " dr = " << dr << " nod = " << nod << " aint = " << aint[nod] << endl;
}
void update( int nod, int st, int dr, int poz)
{
if ( st == dr )
{
aint[nod] = v[st];
return ;
}
int mij = (st + dr) / 2;
if ( poz <= mij )
update( nod * 2, st, mij, poz);
else
update(nod * 2 + 1, mij + 1, dr, poz);
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
int querry( int nod, int st, int dr, int qst, int qdr )
{
if ( qst <= st && qdr >= dr )
return aint[nod];
int mij = (st + dr) / 2, ans = 0;
if ( qst <= mij )
ans = querry( nod * 2, st, mij, qst, qdr);
if ( qdr > mij )
ans = ans + querry(nod * 2 + 1, mij + 1, dr, qst, qdr);
return ans;
}
int main()
{
int n, m, i;
fin >> n >> m;
for ( i = 1; i <= n; ++i )
fin >> v[i];
build(1, 1, n);
for ( i = 1; i <= m; ++i )
{
int a, b, tip;
fin >> tip >> a >> b;
if ( tip == 1 )
fout << querry(1, 1, n, a, b) << '\n';
else
{
v[a] -= b;
update(1, 1, n, a);
}
}
return 0;
}