#include <bits/stdc++.h>
#define DMAX 15010
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int V[DMAX];
int AI[4*DMAX];
int laz[4*DMAX];
int n,m;
void build(int node,int st,int dr);
void lazy(int node,int st,int dr,int x,int y,int val);
int query(int node,int st,int dr,int x,int y);
int main()
{int i,op,x,y;
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>V[i];
build(1,1,n);
for(i=1;i<=m;i++)
{fin>>op>>x>>y;
if(!op)
lazy(1,1,n,x,x,-y);
else
fout<<query(1,1,n,x,y)<<'\n';
}
return 0;
}
void build(int node,int st,int dr)
{if(st==dr)
{AI[node]=V[st];
return;
}
int mij=(st+dr)/2;
build(2*node,st,mij);
build(2*node+1,mij+1,dr);
AI[node]=AI[2*node]+AI[2*node+1];
}
void lazy(int node,int st,int dr,int x,int y,int val)
{if(laz[node] && st!=dr)
{int mij=(st+dr)/2;
laz[2*node]+=laz[node];
AI[2*node]+=laz[node]*(mij-st+1);
laz[2*node+1]+=laz[node];
AI[2*node+1]+=laz[node]*(dr-mij);
laz[node]=0;
}
if(st>=x && dr<=y)
{laz[node]+=val;
AI[node]+=val*(dr-st+1);
return;
}
int mij=(st+dr)/2;
if(x<=mij)
lazy(2*node,st,mij,x,y,val);
if(y>mij)
lazy(2*node+1,mij+1,dr,x,y,val);
AI[node]=AI[2*node]+AI[2*node+1];
}
int query(int node,int st,int dr,int x,int y)
{int mij=(st+dr)/2,ans=0;
if(laz[node] && st!=dr)
{laz[2*node]+=laz[node];
AI[2*node]+=laz[node]*(mij-st+1);
laz[2*node+1]+=laz[node];
AI[2*node+1]+=laz[node]*(dr-mij);
laz[node]=0;
}
if(st>=x && dr<=y)
return AI[node];
if(x<=mij)
ans+=query(2*node,st,mij,x,y);
if(y>mij)
ans+=query(2*node+1,mij+1,dr,x,y);
return ans;
}