#include <fstream>
using namespace std;
ifstream in ("datorii.in");
ofstream out ("datorii.out");
void update ( int nod, int left, int right, int poz, int val );
void dec ( int nod, int left, int right, int poz, int val );
void f_find ( int nod, int left, int right );
int n, m;
int aint[100137];
int s, c, a, b;
int main()
{
in >> n >> m;
for ( register int i = 1 ; i <= n ; ++i )
{
in >> a;
update ( 1, 1, n, i, a);
}
for ( register int i = 1 ; i <= m ; ++i )
{
in >> c >> a >> b;
if ( c == 0 )
dec ( 1, 1, n, a, b );
else
{
s = 0;
f_find ( 1, 1, n );
out << s << '\n';
}
}
return 0;
}
void update ( int nod, int left, int right, int poz, int val )
{
int mid = ( left + right ) / 2;
if ( left == right )
{
aint[nod] = val;
return;
}
if ( poz <= mid )
update ( nod * 2 , left, mid, poz, val );
else
update ( nod * 2 + 1, mid + 1, right, poz, val );
aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
}
void dec ( int nod, int left, int right, int poz, int val )
{
int mid = ( left + right ) / 2;
if ( left == right )
{
aint[nod] -= val;
return;
}
if ( poz <= mid )
dec ( nod * 2 , left, mid, poz, val );
else
dec ( nod * 2 + 1, mid + 1, right, poz, val );
aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
}
void f_find ( int nod, int left, int right )
{
int mid = ( left + right ) / 2;
if ( a <= left && right <= b )
{
s += aint[nod];
return ;
}
if ( a <= mid )
f_find ( nod * 2 , left , mid );
if ( mid < b )
f_find ( nod * 2 + 1 , mid + 1 , right );
}