#include <bits/stdc++.h>
using namespace std;
const int N = 1e7 + 10;
int n, q, k, a, b, c, x;
int sum[N], add[N], o[N];
void update(int k, int l, int r, int x) {
sum[k] += (r - l + 1) * x;
add[k] += x;
}
void pushdown(int k, int l, int r) {
if (add[k] == 0) return;
int mid = (l + r) >> 1;
update(k << 1, l, mid, add[k]);
update(k << 1 | 1, mid + 1, r, add[k]);
add[k] = 0;
}
int query(int k, int l, int r, int a, int b) {
if (a <= l && b >= r)
return sum[k];
pushdown(k, l, r);
int mid = (l + r) >> 1, cnt = 0;
if (a <= mid)
cnt += query(k << 1, l, mid, a, b);
if (b > mid)
cnt += query(k << 1 | 1, mid + 1, r, a, b);
return cnt;
}
void Add(int k, int l, int r, int a, int b, int x) {
if (a <= l && b >= r) {
update(k, l, r, x);
return;
}
pushdown(k, l, r);
int mid = (l + r) >> 1;
if (a <= mid) Add(k << 1, l, mid, a, b, x);
if (b > mid) Add(k << 1 | 1, mid + 1, r, a, b, x);
sum[k] = sum[k << 1] + sum[k << 1 | 1];
}
void build(int k, int l, int r) {
if (l == r) {
sum[k] = o[l];
return;
}
int mid = (l + r) >> 1;
build(k << 1, l, mid);
build(k << 1 | 1, mid + 1, r);
sum[k] = sum[k << 1] + sum[k << 1 | 1];
}
int main() {
cin >> n >> q;
for (int i = 1; i <= n; i++)
cin >> o[i];
build(1, 1, n);
while (q--) {
cin >> c >> a >> b;
if (c == 1) {
cin >> x;
Add(1, 1, n, a, b, x);
}
else
cout << query(1, 1, n, a, b) << endl;
}
return 0;
}