#include<stdio.h>
#include<string.h>
#define NMAX 15007
int Arbi[3 * NMAX];
int A[NMAX] , a , x , y , poz , Ans , n , Q , Tip;
void update(int nod , int st , int dr)
{
if(st == dr)
{
Arbi[nod] = a;
return ;
}
int med = (st + dr) >> 1;
if(med >= poz)
update(2 * nod , st , med);
else
update(2 * nod + 1 , med + 1 , dr);
Arbi[nod] = Arbi[2 * nod] + Arbi[2 * nod + 1];
}
void query(int nod , int st , int dr , int x , int y)
{
if(st >= x && dr <= y)
{
Ans += Arbi[nod];
return ;
}
int med = (st + dr) >> 1;
if(med >= x)
query(2 * nod , st , med , x , y);
if(med < y)
query(2 * nod + 1 , med + 1 , dr , x , y);
}
void afis()
{
for(int i = 1 ; i <= n + 10; ++ i)
printf("%d " , Arbi[i]);
printf("\n");
}
int main()
{
freopen("datorii.in" , "r" , stdin);
freopen("datorii.out" , "w" , stdout);
scanf("%d %d" , &n , &Q);
for(int i = 1 ; i <= n ; ++ i)
{
scanf("%d" , &A[i]);
a = A[i];
poz = i;
update(1 , 1 , n);
///afis();
}
///afis();
for(int i = 1 ; i <= Q ; ++ i)
{
scanf("%d %d %d" , &Tip , &poz , &a);
if(Tip == 0)
a = A[poz] - a , update(1 , 1 , n);/// , afis();
else
{
Ans = 0;
query(1 , 1 , n , poz , a);
printf("%d\n" , Ans);
}
}
}