#include<iostream>
using namespace std;
typedef long long ll;
ll n,m,in[100001],sum[400004],lazy[400004],li[400004],ri[400004];
inline void push_up(ll i) {
sum[i]=sum[i<<1]+sum[i<<1|1];
}
inline void push_down(ll i) {
sum[i]+=lazy[i]*(ri[i]-li[i]+1);
if(ri[i]!=li[i]) {
lazy[i<<1]+=lazy[i];
lazy[i<<1|1]+=lazy[i];
push_down(i<<1),push_down(i<<1|1);
}
lazy[i]=0;
}
inline void build(ll i,ll l,ll r) {
li[i]=l,ri[i]=r;
if(l==r)sum[i]=in[l];
else {
ll mid=(l+r)>>1;
build(i<<1,l,mid),build(i<<1|1,mid+1,r);
push_up(i);
}
}
inline void add(ll i,ll l,ll r,ll k) {
if(l<=li[i]&&ri[i]<=r)lazy[i]+=k;
else {
if(li[i<<1]<=l&&ri[i<<1]>=l)add(i<<1,l,r,k);
if(li[i<<1|1]<=r&&ri[i<<1|1]>=r)add(i<<1|1,l,r,k);
}
}
inline ll query(ll i,ll l,ll r) {
push_down(i);
if(l<=li[i]&&ri[i]<=r) {
return sum[i];
} else {
ll res=0;
if(li[i<<1]<=l&&ri[i<<1]>=l)res+=query(i<<1,l,r);
if(li[i<<1|1]<=r&&ri[i<<1|1]>=r)res+=query(i<<1|1,l,r);
return res;
}
}
int main() {
cin>>n>>m;
for(ll i=1; i<=n; ++i)cin>>in[i];
build(1,1,n);
ll type,l,r,k;
for(ll i=0; i<m; ++i) {
cin>>type>>l>>r;
if(type==1) {
cin>>k;
add(1,l,r,k);
} else {
cout<<query(1,l,r)<<endl;
}
}
}