#include <fstream>
using namespace std;
int n,m,r;
int arb[450003],t[15003];
/*void Citire()
{
}*/
int Adauga(int nod,int st,int dr)
{
int mijl,a,b;
if(st==dr)
{
arb[nod]=t[st];
return arb[nod];
}
mijl=(st+dr)/2;
a=Adauga(2*nod,st,mijl);
b=Adauga(2*nod+1,mijl+1,dr);
arb[nod]=a+b;
return arb[nod];
}
void Update(int nod,int st,int dr,int x,int i)
{
int mijl;
if(st==dr)
{
arb[nod]=x;
t[st]=x;
return;
}
mijl=(st+dr)/2;
if(i<=mijl)
Update(2*nod,st,mijl,x,i);
else
Update(2*nod+1,mijl+1,dr,x,i);
arb[nod]=arb[2*nod+1]+arb[2*nod];
}
int Query(int nod,int st,int dr,int a,int b)
{
int mijl,x,y;;
if(a>dr || st>b)
return 0;
if(a <= st && dr <= b)
return arb[nod];
mijl=(st+dr)/2;
x=Query(2*nod,st,mijl,a,b);
y=Query(2*nod+1,mijl+1,dr,a,b);
return x+y;
}
int main()
{
int i,a,b,tip;
ifstream fin("datorii.in");
fin>>n>>m;
for(i=1;i<=n;++i)
fin>>t[i];
Adauga(1,1,n);
ofstream fout("datorii.out");
for(i=1;i<=m;++i)
{
fin>>tip>>a>>b;
if(tip==0)
Update(1,1,n,t[a]-b,a);
else
{
r=0;
r=Query(1,1,n,a,b);
fout<<r<<"\n";
}
}
fin.close();
fout.close();
return 0;
}