RT
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
long long n,m,ll[100086],rr[100086],bl[100086],val[100086],sum[1024],mark[1024];
long long k,x,y,c3;
void add() {
if(bl[x]=bl[y]){
for(long long i=x;i<=y;i++)
val[i]+=c3,sum[bl[x]]+=c3;
return;
}
for(long long j=bl[x]; j<=bl[y]; j++) {
if(j==bl[x]){
for(long long i=x;i<=rr[j];i++)val[i]+=c3,sum[bl[x]]+=c3;
}else if(j==bl[y]){
for(long long i=ll[j];i<=y;i++)val[i]+=c3,sum[bl[y]]+=c3;
}else {
mark[j]+=c3;
}
}
}
long long find() {
long long ans=0;
if(bl[x]=bl[y]){
for(long long i=x;i<=y;i++)
ans+=val[i]+mark[bl[x]];
return ans;
}
for(long long j=bl[x]; j<=bl[y]; j++) {
if(j==bl[x]){
for(long long i=x;i<=rr[j];i++)ans+=val[i]+mark[j];
}else if(j==bl[y]){
for(long long i=ll[j];i<=y;i++)ans+=val[i]+mark[j];
}else {
ans+=sum[j]+mark[j]*(rr[j]-ll[j]+1);
}
}
return ans;
}
int main() {
scanf("%d%d",&n,&m);
long long sq=sqrt(n);
for(long long i=1; i<=sq; i++) {
ll[i]=sq*(i-1)+1;
rr[i]=sq*i;
}
ll[sq]=n;
for(long long i=1; i<=n; i++)bl[i]=(i-1)/sq+1;
for(long long i=1; i<=n; i++) {
scanf("%d",&val[i]);
sum[bl[i]]+=val[i];
}
for(long long i=1; i<=m; i++) {
scanf("%d%d%d",&k,&x,&y);
if(k==1) {
scanf("%d",&c3);
add();
}else{
printf("%d\n",find());
}
}
return 0;
}