#include<fstream>
#include<cstdio>
using namespace std;
const int MaxN = 100001;
int n,m,val,poz,cost,st,dr,Arb[MaxN];
void update(int nod,int left , int right )
{
if( left == right )
{
Arb[nod] -= val;
return ;
}
int midd = (left+right)>>1;
if( poz <= midd )
update(2*nod,left,midd);
else
update(2*nod,midd+1,right);
Arb[nod] = Arb[2*nod] + Arb[2*nod+1];
}
void query(int nod,int left , int right)
{
if( st <= left && right <= dr )
{
cost += Arb[nod];
return ;
}
int midd = (left+right)>>1;
if( st <= midd )
query(2*nod,left,midd);
if( midd < dr )
query(2*nod+1,midd+1,right);
}
void update_initial(int nod,int left,int right)
{
if( left == right )
{
Arb[nod] = val;
return ;
}
int midd = (left + right) >> 1;
if( poz <= midd )
update_initial(2*nod,left,midd);
else
update_initial(2*nod+1,midd+1,right);
Arb[nod] = Arb[2*nod] + Arb[2*nod+1];
}
int main()
{
freopen( "datorii.in" , "r" , stdin );
freopen( "datorii.out" , "w" , stdout );
scanf("%d%d" , &n , &m);
int i,x;
for( i = 1 ; i <= n ; i++ )
{
scanf("%d" , &x);
poz = i;
val = x;
update_initial(1,1,n);
}
int op,a,b;
for( i = 1 ; i <= m ; i++ )
{
scanf("%d%d%d" , &op ,&a , &b);
if( !op )
{
poz = a;
val = b;
update(1,1,n);
}
else
{
cost = 0;
st = a;
dr = b;
query(1,1,n);
printf("%d\n" , cost);
}
}
return 0;
}