#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstring>
#include<map>
#include<unordered_map>
#include<unordered_set>
#define lowbit(x) x&-x
#define int long long
#define ll long long
#define pii pair<int,int>
#define ull unsigned long long
#define maxn 2000010
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
int a[maxn], di[maxn], dii[maxn];
int n, m;
void add(int st, int x)
{
for (int i = st; i <= n; i += lowbit(i))
di[i] += x, dii[i] += x * st;
}
int query(int x)
{
int ans = 0;
for (int i = x; i >= 1; i -= lowbit(i))
ans += (x + 1) * di[i] - dii[i];
return ans;
}
void solve()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++)
add(i, a[i] - a[i - 1]);
int mian = a[1];
while (m--)
{
int a;
int l, r, d;
cin >> a;
if (a == 1) {
cin >> l >> r >> d;
add(l, d);
add(r + 1, -d);
}
else if (a == 2)
{
cin >> d;
mian += d;
}
else if (a == 3)
{
cin >> d;
mian -= d;
}
else if (a == 4)
{
cin >> l >> r;
cout << query(r) - query(l - 1) + (l == 1) * mian << '\n';
}
else cout << query(1) + mian << '\n';
}
}
signed main()
{
IOS;
int K;
K = 1;
while (K--) solve();
return 0;
}