#include<stdio.h>
#define Max 500000
int Arb[Max],n,m,x,a,b,Pos,Val,inc,sf,suma,i;
void citire();
void update(int,int,int);
void query(int,int,int);
int main(){
citire();
return 0;
}
void citire(){
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1;i<=n;i++) {
scanf("%d",&x);
Pos=i;Val=x;
update(1,1,n);
}
for (i=1;i<=m;i++){
scanf("%d %d %d",&x,&a,&b);
if (x==0)
{
Pos=a;Val=-b;
update(1,1,n);
}
else
{
suma=0;
inc=a;sf=b;
query(1,1,n);
printf("%d\n",suma);
}
}
}
void update(int nod, int left, int right){
if (left==right)
{
Arb[nod]+=Val;
return;
}
int mij=(left+right)/2;
if (Pos<=mij) update(2*nod,left,mij);
else update(2*nod+1,mij+1,right);
Arb[nod]=Arb[2*nod]+Arb[2*nod+1];
}
void query(int nod,int left,int right) {
if (inc<=left && right<=sf)
{
suma+=Arb[nod];
return;
}
int mij=(left+right)/2;
if (inc<=mij) query(2*nod,left,mij);
if (mij<sf) query(2*nod+1,mij+1,right);
}