#include<stdio.h>
using namespace std;
#define ll long long
const int N = 5e5 + 7;
ll c[N], c2[N];
ll z;
int n, f;
int lowbit(int x){
return x & -x;
}
void add(int x, int d){
for(int i = x; i <= n; i += lowbit(i)){
c[i] += d;
c2[i] += x * d;
}
}
void r_add(int l, int r, int d){
add(l, d);
add(r + 1, -d);
}
ll query(int x){
ll sum = 0;
for(int i = x; i; i -= lowbit(i)){
sum += (x + 1) * c[i] - c2[i];
}
return sum;
}
ll r_query(int l, int r){
ll ans = query(r) - query(l - 1);
if(l == 1){
ans += z;
}
return ans;
}
int main(){
scanf("%d%d", &n, &f);
for(int i = 1, now, lst = 0; i <= n; i++, lst = now){
scanf("%d", &now);
add(i, now - lst);
}
int opt;
while(f--){
scanf("%d", &opt);
if(opt == 1){
int l, r, k;
scanf("%d%d%d", &l, &r, &k);
r_add(l, r, k);
}
else{
if(opt == 2){
int k;
scanf("%d", &k);
z += k;
}
else{
if(opt == 3){
int k;
scanf("%d", &k);
z -= k;
}
else{
if(opt == 4){
int l, r;
scanf("%d%d", &l, &r);
printf("%lld\n", r_query(l, r));
}
else{
printf("%lld\n", z + query(1));
}
}
}
}
}
return 0;
}