#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[100001];
int tree[400001];
int lazy[400001];
int build(int l,int r,int x)
{
if(l!=r)
{
return tree[x]=build(l,(l+r)/2,x*2)+build((l+r)/2+1,r,x*2+1);
}
else
{
return tree[x]=a[l];
}
}
int getsum(int l,int r,int l1,int r1,int x)
{
if(l1>=l&&r1<=r)
return tree[x];
int sum=0;
if(lazy[x]!=0)
{
lazy[x*2]+=lazy[x];
lazy[x*2+1]+=lazy[x];
tree[x*2]+=lazy[x]*((l1+r1)/2-l1+1);
tree[x*2+1]+=lazy[x]*(r1-((l1+r1)/2+1)+1);
lazy[x]=0;
}
if(l<=(l1+r1)/2)
sum+=getsum(l,r,l1,(l1+r1)/2,x*2);
if(r>=(l1+r1)/2+1)
sum+=getsum(l,r,(l1+r1)/2+1,r1,x*2+1);
return sum;
}
void getlazy(int l,int r,int l1,int r1,int x,int k)
{
if(l1>=l&&r1<=r)
{
tree[x]+=(r1-l1+1)*k;
lazy[x]=k;
return;
}
if(l<=(l1+r1)/2)
getlazy(l,r,l1,(l1+r1)/2,x*2,k);
if(r>=(l1+r1)/2+1)
getlazy(l,r,(l1+r1)/2+1,r1,x*2+1,k);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
build(1,n,1);
for(int i=1;i<=m;i++)
{
int op;
cin>>op;
if(op==1)
{
int x,y,k;
cin>>x>>y>>k;
getlazy(x,y,1,n,1,k);
}
if(op==2)
{
int x,y;
cin>>x>>y;
cout<<getsum(x,y,1,n,1)<<endl;
}
}
}