RT,wtcl
#include<bits/stdc++.h>
using namespace std;
#define rg register
#define il inline
#define cs const
#define sta static
#define i64 long long
#define DEBUG //fprintf(stderr,"PASSED [%s] in LINE %d\n",__FUNCTION__,__LINE__);
namespace io{sta streambuf *inbuf=cin.rdbuf();sta streambuf *outbuf=cout.rdbuf();char buf[1<<21],*p1=buf,*p2=buf;il char gc(){return (p1==p2&&(p2=(p1=buf)+inbuf->sgetn(buf,1<<21),p1==p2)?EOF:*p1++);}il void pc(cs char x){outbuf->sputc(x);}il void ps(cs char *x){outbuf->sputn(x,sizeof(x)),pc(10);}il i64 read(){rg i64 _s=0,_f=1;rg char _ch=gc();for(;!isdigit(_ch);_ch=gc())if(_ch=='-')_f=-1;for(;isdigit(_ch);_ch=gc())_s=_s*10ll+_ch-'0';return _s*_f;}template<typename T>il void write(T _x1){if(_x1<0)pc('-'),_x1=-_x1;sta char _sta[15];int _p=0;do{_sta[_p++]=_x1%10^48;_x1/=10;}while(_x1);while(_p--)pc(_sta[_p]);}string _s;il string readstr(){_s.clear();rg char _ch=gc();while(isspace(_ch))_ch=gc();for(;!isspace(_ch);_ch=gc())_s+=_ch;return _s;}il void writestr(string _s){for(unsigned i=0;i<_s.size();++i)pc(_s[i]);}il void writeln(int _x){write(_x);pc(10);}il void writesp(int _x){write(_x);pc(' ');}}using namespace io;
cs int maxn=2e5+5;
int n,f;
i64 a[maxn<<2],tg[maxn<<2];
il void pushup(int x){a[x]=a[x<<1]+a[x<<1|1];}
il void pushdwon(int x,int l,int r)
{
if(!tg[x])return;
int t=tg[x],mid=(l+r)>>1;
a[x<<1]+=t*(mid-l+1);tg[x<<1]+=t;
a[x<<1|1]+=t*(r-mid);tg[x<<1|1]+=t;
tg[x]=0;
}
il void build(int x=1,int l=1,int r=n)
{
if(l==r)return a[x]=read(),void();
int mid=(l+r)>>1;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
pushup(x);
}
il void upd(cs int s,cs int t,cs int v,int x=1,int l=1,int r=n)
{
if(s<=l&&r<=t)return a[x]+=v*(r-l+1),tg[x]+=v,void();
pushdwon(x,l,r);
int mid=(l+r)>>1;
if(s<=mid)upd(s,t,v,x<<1,l,mid);
if(t>mid)upd(s,t,v,x<<1|1,mid+1,r);
pushup(x);
}
il i64 ask(cs int s,cs int t,int x=1,int l=1,int r=n)
{
if(s<=l&&r<=t)return a[x];
int mid=(l+r)>>1;
i64 res=0;
if(s<=mid)res+=ask(s,t,x<<1,l,mid);
if(t>mid)res+=ask(s,t,x<<1|1,mid+1,r);
return res;
}
int main()
{
n=read();f=read();
build();
while(f--)
{
i64 op=read(),l,r,k;
switch(op)
{
case 1:l=read();r=read();k=read();upd(l,r,k);break;
case 2:k=read();upd(1,1,k);break;
case 3:k=read();upd(1,1,-k);break;
case 4:l=read();r=read();writeln(ask(l,r));break;
case 5:writeln(ask(1,1));break;
}
}
return 0;
}