#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;
}