#include<stdio.h>
#define NMAX 100100
int n,m,arb[NMAX],pos[NMAX];
int s[15001];
int x,y;
void Generate_arb(int,int,int);
void Update(int,int,int,int,int);
void Gen(int,int,int);
int Question(int,int,int);
int main()
{
int i,aux;
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",&aux);
if(i>1)
s[i]+=s[i-1]+aux;
else
s[i]=aux;
}
Generate_arb(1,n,1);
for(i=1;i<=n;++i)
{
scanf("%d%d%d",&aux,&x,&y);
/*if(aux)
printf("%d\n",Question(1,n,1));
else*/
Update(y,x,1,n,1);
}
return 0;
}
void Generate_arb(int st,int dr,int nd)
{
bool exit=0;
if(st==dr)
{
exit=1;
pos[st]=nd;
}
if(st>1)
arb[nd]=s[dr]-s[st-1];
else
arb[nd]=s[dr];
if(exit)
return;
int m=(st+dr)>>1;
Generate_arb(st,m,nd<<1);
Generate_arb(m+1,dr,(nd<<1)+1);
}
int Question(int st,int dr,int nod)
{
if(y<st||x>dr)
return 0;
if(st==dr)
return arb[nod];
int m=(st+dr)>>1;
int a,b;
a=Question(st,m,nod<<1);
b=Question(m+1,dr,(nod<<1)+1);
return a+b;
}
void Update(int val,int pover,int st,int dr,int nod)
{
bool exit=0;
arb[nod]-=val;
if(st==dr)
exit=1;
if(exit)
return;
int m=(st+dr)>>1;
if(pover<=m)
Update(val,pover,st,m,nod<<1);
else
Update(val,pover,m+1,dr,(nod<<1)+1);
}