#include <bits/stdc++.h>
#define N 100013
#define ll long long
#define INF 0x7f7f7f7f
using namespace std;
int n,m;
int a[N];
int t[N << 2],tag[N << 2];
void build(int u,int l,int r)
{
if(l == r)
{
t[u] = a[l];
return;
}
int mid = (l + r) >> 1;
build(u << 1,l,mid);
build(u << 1 | 1,mid + 1,r);
t[u] = t[u << 1] + t[u << 1 | 1];
}
void f(int u,int l,int r,int k)
{
tag[u] += k;
t[u] += (r - l + 1) * k;
}
void push_down(int u,int l,int r)
{
int mid = (l + r) >> 1;
f(u << 1,l,mid,tag[u]);
f(u << 1 | 1,mid + 1,r,tag[u]);
tag[u] = 0;
}
void update(int u,int l,int r,int L,int R,int k)
{
// printf("u: u = %d l = %d r = %d L = %d R = %d\n",u,l,r,L,R);
// if(R < l || L > r) return;
if(L <= l && r <= R)
{
tag[u] += k;
t[u] += (r - l + 1) * k;
// push_down(u,l,r,k);
return;
}
push_down(u,l,r);
int mid = (l + r) >> 1;
if(L <= mid) update(u << 1,l,mid,l,R,k);
if(R > mid) update(u << 1 | 1,mid + 1,r,L,R,k);
t[u] = t[u << 1] + t[u << 1 | 1];
}
ll query(int u,int l,int r,int L,int R)
{
// printf("q: u = %d l = %d r = %d L = %d R = %d\n",u,l,r,L,R);
if(L <= l && r <= R)
{
printf("\n");
return t[u];
}
push_down(u,l,r);
int mid = (l + r) >> 1;
ll sum = 0;
if(L <= mid) sum += query(u << 1,l,mid,L,R);
if(R > mid) sum += query(u << 1 | 1,mid + 1,r,L,R);
printf("sum = %d\n",sum);
return sum;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
build(1,1,n);
for(int i=1;i<=m;++i)
{
int op,L,R,k;
scanf("%d%d%d",&op,&L,&R);
if(op == 1)
{
scanf("%d",&k);
update(1,1,n,L,R,k);
}else printf("%lld\n",query(1,1,n,L,R));
}
return 0;
}