#include <cstdio>
#define MAX_N 15005
int Pos, Val, V[MAX_N];
long long T[MAX_N << 2];
int N, M;
int start, end;
long long Rez;
void date(int nod, int li, int lf)
{
T[nod] -= Val;
if(li == lf)
{
return;
}
int mij = (li + lf) >> 1;
if(Pos <= mij)
date(2 * nod, li, mij);
else
date(2 * nod + 1, mij + 1, lf);
}
void update(int nod, int li, int lf)
{
if(li == lf)
{
T[nod] = Val;
return;
}
int mij = (li + lf) >> 1;
if(Pos <= mij)
update(2 * nod, li, mij);
else
update(2 * nod + 1, mij + 1, lf);
T[nod] = T[2*nod] + T[2*nod + 1];
}
void querry(int nod, int li, int lf)
{
if(start <= li && end >= lf)
{
Rez += T[nod];
return;
}
int mij = (li + lf) >> 1;
if(start <= mij)
querry(2 * nod, li, mij);
if(end > mij)
querry(2 * nod + 1, mij + 1, lf);
}
void citire()
{
scanf("%d %d",&N, &M);
for(int i = 1; i <= N; ++i)
{
scanf("%d",V+i);
Pos = i, Val = V[i];
update(1,1,N);
}
}
void solve()
{
int t,x,y;
for(int i = 1; i <= M; ++i)
{
scanf("%d %d %d",&t,&x,&y);
if(!t)
{
Pos = x;
Val = y;
date(1,1,N);
}
else
{
start = x;
end = y;
Rez = 0;
querry(1,1,N);
printf("%lld\n",Rez);
}
}
}
int main()
{
freopen("datorii.in","rt",stdin);
freopen("datorii.out","wt",stdout);
citire();
solve();
}