#include<bits/stdc++.h>
using namespace std;
#define int long long
#define lowbit(x) (x&-(x))
const int N=1e5;
int tree1[N];
int tree2[N];
int n,m;
void update1(int x,int d){
while(x<=n){
tree1[x]+=d;
x+=lowbit(x);
}
}
void update2(int x,int d){
while(x<=n){
tree2[x]+=d;
x+=lowbit(x);
}
}
int sum1(int x){
int ans=0;
while(x>=1){
ans+=tree1[x];
x-=lowbit(x);
}
return ans;
}
int sum2(int x){
int ans=0;
while(x>=1){
ans+=tree2[x];
x-=lowbit(x);
}
return ans;
}
signed main(){
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
int old=0;
for(int i=1;i<=n;i++){
int x;
cin>>x;
update1(i,x-old);
update2(i,(i-1)*(x-old));
old=x;
}
while(m--){
int x;
cin>>x;
if(x==1){
int l,r,k;
cin>>l>>r>>k;
update1(l,k);
update1(r+1,-k);
update2(l,(l-1)*k);
update2(r+1,-(r*k));
}else if(x==2){
int l,r;
cin>>l>>r;
cout<<r*sum1(r)-(l-1)*sum1(l-1)-(sum2(r)-sum2(l-1))<<endl;
}
}
return 0;
}