#include <iostream>
using namespace std;
const int maxn=1e5+5;
int val[maxn],tag[maxn];
void pushdown(int u,int l,int r) {
if(tag[u]) {
val[u]+=tag[u]*(r-l+1);
tag[u*2]=tag[u];
tag[u*2+1]=tag[u];
tag[u]=0;
}
}
void update(int u,int l,int r,int s,int t,int x) {
if(s<=l&&r<=t) {
val[u]+=x*(r-l+1);
tag[u]+=x;
return;
}
int mid=(l+r)/2;
pushdown(u,l,r);
if(s<=mid)update(u*2,l,mid,s,t,x);
if(t>mid)update(u*2+1,mid+1,r,s,t,x);
}
int query(int u,int l,int r,int s,int t) {
if(s<=l&&r<=t) {
return val[u];
}
int mid=(l+r)/2;
pushdown(u,l,r);
if(s<=mid)return query(u*2,l,mid,s,t);
if(t>mid)return query(u*2+1,mid+1,r,s,t);
return query(u*2,l,mid,s,t)+query(u*2+1,mid+1,r,s,t);
}
int main() {
int n,q;
cin>>n>>q;
for(int i=1; i<=n; i++) {
int x;
cin>>x;
update(1,1,n,i,i,x);
}
while(q--) {
int op;
cin>>op;
if(op==1) {
int l,r,x;
cin>>l>>r>>x;
update(1,1,n,l,r,x);
}
if(op==2) {
int l,r;
cin>>l>>r;
cout<<query(1,1,n,l,r)<<endl;
}
/*
for(int i=1; i<=n; i++) {
cout<<query(1,1,n,i,i)<<" ";
}
cout<<endl;
*/
}
}