#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
struct interval
{
int a,b,suma;
} v[10*15000+100];;
void update(int nod,int st,int dr,int x,int pos)
{
if(st==dr)
{
v[nod].suma=x;
v[nod].a=st;
v[nod].b=dr;
}
else
{
int mij=(st+dr)/2;
if(pos<=mij) update(nod*2,st,mij,x,pos);
else update(nod*2+1,mij+1,dr,x,pos);
v[nod].suma=v[nod*2].suma+v[nod*2+1].suma;
v[nod].a=st;
v[nod].b=dr;
}
}
void scade(int nod,int st,int dr,int V,int pos)
{
if(st==dr)
{
v[nod].suma-=V;
}
else
{
int mij=(st+dr)/2;
if(pos<=mij) scade(nod*2,st,mij,V,pos);
else scade(nod*2+1,mij+1,dr,V,pos);
v[nod].suma=v[nod*2].suma+v[nod*2+1].suma;
}
}
int querry(int nod,int st,int dr,int P,int Q)
{
if(st==P&&dr==Q)
{
return v[nod].suma;
}
else
{
int mij=(st+dr)/2;
if(Q<=mij) return querry(nod*2,st,mij,P,Q);
else if(P>mij) return querry(nod*2+1,mij+1,dr,P,Q);
else if(P<=mij && Q>mij) return querry(nod*2,st,mij,P,mij)+querry(nod*2+1,mij+1,dr,mij+1,Q);
}
}
int main()
{
int n,m,i,a,ok,T,V,P,Q;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>a;
update(1,1,n,a,i);
}
for(i=1;i<=m;i++)
{
fin>>ok;
if(ok==0)
{
fin>>T>>V;
scade(1,1,n,V,T);
}
else
{
fin>>P>>Q;
fout<<querry(1,1,n,P,Q)<<"\n";
}
}
}