#include<bits/stdc++.h>
using namespace std;
const long long maxn = 1e6 + 10;
long long d[maxn];
long long a[maxn];
long long m, n;
void build(long long l, long long r, long long p)
{
if(l == r)
{
d[p] = a[l];
return ;
}
long long mid = l + (r - l) / 2;
build(l, mid, p * 2);
build(mid + 1, r, p * 2 + 1);
d[p] = d[p * 2] + d[p * 2 + 1];
}
long long b[maxn] = {0};
void update(long long l, long long r, long long s, long long t, long long c, long long p)
{
if(l <= s && t <= r)
{
b[p] += c;
d[p] += c * (t - s + 1);
return ;
}
long long mid = s + (t - s) / 2;
if(b[p] != 0 && s != t)
{
b[p * 2] += b[p];
b[p * 2 + 1] += b[p];
d[p * 2] += b[p] * (mid - s + 1);
d[p * 2 + 1] += b[p] * (t - mid);
b[p] = 0;
}
if(l <= mid)
update(l, r, s, mid, c, p * 2);
if(r > mid)
update(l, r, mid + 1, r, c, p * 2 + 1);
d[p] = d[p * 2] + d[p * 2 + 1];
}
long long sum = 0;
long long ask(long long l, long long r, long long s, long long t, long long p)
{
if(l <= s && t <= r)
return d[p];
long long mid = s + (t - s) / 2;
if(b[p] != 0)
{
b[p * 2] = b[p];
b[p * 2 + 1] = b[p];
d[p * 2] += b[p] * (mid - s + 1);
d[p * 2 + 1] += b[p] * (t-mid);
b[p] = 0;
}
if(l <= mid)
sum += ask(l, r, s, mid, p * 2);
if(r > mid)
sum += ask(l, r, mid + 1, r, p * 2 + 1);
return sum;
}
int main()
{
ios :: sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(long long i = 1; i <= n; i++)
cin >> a[i];
build(1, n, 1);
while(m--)
{
long long op;
cin >> op;
if(op == 1)
{
long long x, y, k;
cin >> x >> y >> k;
update(x, y, 1, n, k, 1);
}
if(op == 2)
{
long long x, y;
cin >> x >> y;
cout << ask(x, y, 1, n, 1) << "\n";
sum = 0;
}
}
return 0;
}