#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int NMAX=1e5+5;
int a[NMAX],aint[NMAX];
void build(int nod,int l,int r)
{
if(l==r)
{
aint[nod]=a[l];
return;
}
int mij=(l+r)/2;
build(2*nod,l,mij);
build(2*nod+1,mij+1,r);
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
void update(int nod,int l,int r,int t,int v)
{
if(l==r&&l==t)
{
aint[nod]-=v;
return;
}
int mij=(l+r)/2;
if(t<=mij)
{
update(2*nod,l,mij,t,v);
}
else
{
update(2*nod+1,mij+1,r,t,v);
}
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
int query(int nod,int l,int r,int p,int q)
{
if(l==p&&r==q)
{
return aint[nod];
}
int mij=(l+r)/2;
if(p>mij)
{
return query(2*nod+1,mij+1,r,p,q);
}
if(q<=mij)
{
return query(2*nod,l,mij,p,q);
}
return query(2*nod,l,mij,p,mij)+query(2*nod+1,mij+1,r,mij+1,q);
}
int main()
{
int n,m;
fin>>n>>m;
for(int i=1; i<=n; i++)
{
fin>>a[i];
}
build(1,1,n);
for(int i=1; i<=m; i++)
{
int op;
fin>>op;
if(op==0)
{
int t,v;
fin>>t>>v;
update(1,1,n,t,v);
}
else
{
int p,q,s=0;
fin>>p>>q;
fout<<query(1,1,n,p,q)<<endl;
}
}
return 0;
}