#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using i128=__int128;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using db = double;
using ldb = long double;
#define F first
#define S second
#define int ull
const int N=5e6;
struct node{
    int l,r;
    int ls,rs;
    ull sum,tag;
}t[N];
int idx=1;
void addtag(int p,int k){
    t[p].tag+=k;
    t[p].sum+=(t[p].r-t[p].l+1)*k;
}
void push_down(int p){
    if(t[p].tag){
        if(!t[p].ls){
            int l=t[p].l,r=t[p].l+t[p].r>>1;
            t[t[p].ls=++idx]={l,r,0,0,0,0};
        }
        addtag(t[p].ls,t[p].tag);
        if(!t[p].rs){
            int l=(t[p].l+t[p].r>>1)+1,r=t[p].r;
            t[t[p].rs=++idx]={l,r,0,0,0,0};
        }
        addtag(t[p].rs,t[p].tag);
        t[p].tag=0;
    }
}
void push_up(int p){
    t[p].sum=t[t[p].ls].sum+t[t[p].rs].sum;
}
void update(int l,int r,int k,int p){
    if(l<=t[p].l&&t[p].r<=r){
        addtag(p,k);
        return;
    }
    push_down(p);
    int mid=(t[p].l+t[p].r)>>1;
    if(l<=mid){
        if(!t[p].ls){
            int l=t[p].l,r=t[p].l+t[p].r>>1;
            t[t[p].ls=++idx]={l,r,0,0,0,0};
        }
        update(l,r,k,t[p].ls);
    }
    if(mid<r){
        if(!t[p].rs){
            int l=(t[p].l+t[p].r>>1)+1,r=t[p].r;
            t[t[p].rs=++idx]={l,r,0,0,0,0};
        }
        update(l,r,k,t[p].rs);
    }
    push_up(p);
}
ull query(int l,int r,int p){
    if(l<=t[p].l&&t[p].r<=r){
        return t[p].sum;
    }
    push_down(p);
    int mid=(t[p].l+t[p].r)>>1;
    ull ans=0;
    if(l<=mid&&t[p].ls){
        ans+=query(l,r,t[p].ls);
    } 
    if(mid<r&&t[p].rs){
        ans+=query(l,r,t[p].rs); 
    }
    return ans;
}
void solve(){
    int n,m;cin>>n>>m;
    t[1]={1,n,0,0,0,0};
    while(m--){
        int op;cin>>op;
        if(op==1){
            int l,r,k;cin>>l>>r>>k;
            update(l,r,k,1);
        }else{
            int l,r;cin>>l>>r;
            ull ans=(l+r)*(r-l+1)/2+query(l,r,1);
            cout<<ans<<"\n";
        }
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);
    int t=1;
    // cin>>t;
    while(t--) solve();
    return 0;
}