#include<iostream>
using namespace std;
struct node{
long long l,r,dat=0,biao=0;
}t[500050];
long long n,m,pd,tou,wei,jias,sum;
long long a[100050];
void build(int i,int l,int r){
t[i].l=l;
t[i].r=r;
if(l==r){
t[i].dat=a[l];
return ;
}
int mid=(l+r)/2;
build(i*2,l,mid);
build(i*2+1,mid+1,r);
t[i].dat=t[i*2].dat+t[i*2+1].dat;
}
void jia(int i){
if(t[i].r<tou||t[i].l>wei) return ;
if(tou<=t[i].l&&wei>=t[i].r){
if(t[i].l==t[i].r){
t[i].dat+=jias;
}else{
t[i].biao+=jias;
}
return ;
}
if(t[i*2].r>=tou)jia(i*2);
if(t[i*2+1].l<=wei)jia(i*2+1);
t[i].dat=t[i*2].dat+t[i*2+1].dat;
}
void cha(int i){
//cout<<tou<<" "<<wei<<endl;
if(t[i].r<tou||t[i].l>wei) return ;
if(tou<=t[i].l&&wei>=t[i].r){
//cout<<"giao"<<t[i].l<<" "<<t[i].r<<endl;
sum+=t[i].dat;
sum+=t[i].biao*(t[i].r-t[i].l+1);
//cout<<"giao";
return ;
}
if(t[i].biao!=0){
t[i*2].biao+=t[i].biao;
t[i*2+1].biao+=t[i].biao;
t[i].dat+=t[i].biao*(t[i].r-t[i].l+1);
t[i].biao=0;
}
if(t[i*2].r>=tou)cha(i*2);
if(t[i*2+1].l<=wei)cha(i*2+1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
for(int i=1;i<=m;i++){
cin>>pd>>tou>>wei;
if(pd==1){
cin>>jias;
jia(1);
}else{
sum=0;
cha(1);
cout<<sum<<endl;
}
}
return 0;
}