#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, f, op, x, y, k,zhu,l,r;
int a[500010], tr1[500010], tr2[500010];
int d[500010];
int lowbit(int x) {
return x & (-x);
}
void add(int x, int y) {
for (int i = x; i <= n; i += lowbit(i)) {
tr1[i] += y;
tr2[i] += x * y;
}
}
int get1(int x) {
int sum = 0;
for (int i = x; i >= 1; i -= lowbit(i)) {
sum += tr1[i];
}
return sum;
}
int get2(int x) {
int sum = 0;
for (int i = x; i >= 1; i -= lowbit(i)) {
sum += tr2[i];
}
return sum;
}
int print(int k) {
return (k + 1) * get1(k) - get2(k);
}
signed main() {
scanf("%d%d",&n,&f);
for (int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
d[i]=a[i]-a[i-1];
add(i, d[i]);
}
zhu=a[1];
while(f--){
scanf("%lld", &op);
if(op==1){
scanf("%lld%lld%lld",&x,&y,&k);
zhu+=k;
if(x==1)x++;
d[x]+=k;
d[y+1]-=k;
add(x,k);
add(y+1,-k);
}else if(op==2){
scanf("%d",&k);
zhu+=k;
}else if(op==3){
scanf("%d",&k);
zhu-=k;
}else if(op==4){
scanf("%lld%lld",&x,&y);
if(x==1)printf("%lld\n", print(y) - print(x - 1)+zhu);
else printf("%lld\n",print(y) - print(x - 1));
}else{
printf("%lld\n",zhu);
}
}
return 0;
}