#include <fstream>
using namespace std;
int arb[90000];
inline void Add_Debt( int Node , int Low , int High , int Day , int Val )
{
if ( Low == High )
arb[Node] += Val;
else
{
arb[Node] += Val;
int Mid = ( Low + High ) / 2;
if ( Day <= Mid )
Add_Debt( 2 * Node , Low , Mid , Day , Val );
else
Add_Debt( 2 * Node + 1 , Mid + 1 , High , Day , Val );
}
}
inline int Query( int Node , int Low , int High , int Day1 , int Day2 )
{
if ( Day1 <= Low && High <= Day2 )
return arb[Node];
if ( High < Day1 || Day2 < Low )
return 0;
int Mid = ( Low + High ) / 2;
return Query( 2 * Node , Low , Mid , Day1 , Day2 ) + Query( 2 * Node + 1 , Mid + 1 , High , Day1 , Day2 );
}
void Read()
{
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int N , M , aux , cer , a1 , b1;
fin >> N >> M;
for ( int i = 1 ; i <= N ; ++i )
{
fin >> aux;
if ( aux )
Add_Debt( 1 , 1 , N , i , aux );
}
for ( int i = 1 ; i <= M ; ++i )
{
fin >> cer >> a1 >> b1;
if ( !cer )
Add_Debt( 1 , 1 , N , a1 , b1 * -1 );
else
fout << Query( 1 , 1 , N , a1 , b1 ) << '\n';
}
fin.close();
fout.close();
}
int main()
{
Read();
return 0;
}