#include<bits/stdc++.h>
using namespace std;
long long a[1919810],d[1919810],temp[1919810];
long long n,m;
long long read()
{
long long x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
void build(long long s,long long t,long long p)
{
if(s==t)
{
d[p]=a[s];
return;
}
long long mid=s+(t-s)/2;
build(s,mid,p*2);
build(mid+1,t,p*2+1);
d[p]=d[p*2]+d[p*2+1];
}
void addk(long long l,long long r,long long s,long long t,long long p,long long k)
{
if(l<=s&&t<=r)
{
d[p]+=(t-s+1)*k,temp[p]+=k;
return;
}
long long mid=s+(t-s)/2;
if(temp[p])
{
d[p*2]+=(mid-s+1)*temp[p],d[p*2+1]+=(t-mid)*temp[p];
temp[p*2]+=temp[p],temp[p*2+1]+=temp[p];
temp[p]=0;
}
if(l<=mid) addk(l,r,s,mid,p*2,k);
if(r>mid) addk(l,r,mid+1,t,p*2+1,k);
d[p]=d[p*2]+d[p*2+1];
}
long long query(long long l,long long r,long long s,long long t,long long p)
{
long long sum=0;
if(l<=s&&t<=r) return d[p];
long long mid=s+(t-s)/2;
if(temp[p])
{
d[p*2]+=(mid-s+1)*temp[p],d[p*2+1]+=(t-mid)*temp[p];
temp[p*2]+=temp[p],temp[p*2+1]+=temp[p];
temp[p]=0;
}
if(l<=mid) sum=query(l,r,s,mid,p*2);
if(r>mid) sum+=query(l,r,mid+1,t,p*2+1);
return sum;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(long long i=1;i<=n;i++) cin>>a[i];
build(1,n,1);
for(long long i=0;i<m;i++)
{
long long op,x,y;
cin>>op>>x>>y;
if(op==1)
{
long long k;
cin>>k;
addk(x,y,1,n,1,k);
}
if(op==2) printf("%d\n",query(x,y,1,n,1));
// for(long long i=1;i<=20;i++) cout<<d[i]<<" ";
// cout<<endl;
}
}