#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=1e6+5;
long long a[N],b[N],c1[N],c2[N],n,m;
long long lowbit(long long num)
{
return num&(-num);
}
void add(long long pos,long long num)
{
long long num1=pos*num;
for(int i=pos;i<=n;i+=lowbit(i))
c1[i]+=num,c2[i]+=num1;
return;
}
long long query1(long long pos)
{
long long num=0;
for(int i=pos;i>=1;i-=lowbit(i))
num+=c1[i];
return num;
}
long long query2(long long pos)
{
long long num=0;
for(int i=pos;i>=1;i-=lowbit(i))
num+=c2[i];
return num;
}
long long query(long long l,long long r)
{
return (query1(r)*(r+1ll)-query2(r))-(query1(l-1)*l-query2(l-1));
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>a[i];
for(int i=1;i<=n;++i)
b[i]=a[i]-a[i-1],add(i,b[i]);
while(m--)
{
long long op,x,y,z;
cin>>op;
if(op==1)
{
cin>>x>>y>>z;
add(x,z);add(y+1,-z);
}
if(op==2)
{
cin>>z;x=y=1;
add(x,z);add(y+1,-z);
}
if(op==3)
{
cin>>z;x=y=1;z*=-z;
add(x,z);add(y+1,-z);
}
if(op==4)
{
cin>>x>>y;
cout<<query(x,y)<<endl;
}
if(op==5)
cout<<query(1,1)<<endl;
}
return 0;
}