#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
#include<queue>
using namespace std;
const int N=1e5+10;
int a[N];
long long ans=0;
int n,q;
struct node{
int l;
int r;
long long sum;
long long lz;
}tr[4*N];
void build(int p,int l,int r)
{
tr[p].l=l,tr[p].r=r;tr[p].lz=0;
if(l==r)
{
tr[p].sum=a[l];
return;
}
int mid=(l+r)>>1;
build(p<<1,l,mid),build(p<<1|1,mid+1,r);
tr[p].sum=tr[p<<1].sum+tr[p<<1|1].sum;
}
void push_down(int p)
{
int k=tr[p].lz;
if(tr[p].lz!=0)
{
tr[p<<1].sum+=k*(tr[p<<1].r-tr[p<<1].l+1);
tr[p<<1].lz+=k;
//push_down(p<<1);
tr[p<<1|1].sum+=k*(tr[p<<1|1].r-tr[p<<1|1].l+1);
tr[p<<1|1].lz+=k;
//push_down(p<<1|1);
tr[p].lz=0;
}
return;
}
void modify(int p,int l,int r,int x)
{
int a=tr[p].l,b=tr[p].r;
if(tr[p].l>=l&&tr[p].r<=r)
{
tr[p].sum+=x*(b-a+1);
tr[p].lz+=x;
//push_down(p);
return;
}
int mid=(tr[p].l+tr[p].r)>>1;
if(l<=mid)modify(p<<1,l,r,x);
if(r>=mid+1)modify(p<<1|1,l,r,x);
tr[p].sum=tr[p<<1].sum+tr[p<<1|1].sum;
return;
}
long long query(int p,int l,int r)
{
//printf("%d %d %d",p,l,r);
if(tr[p].l>=l&&tr[p].r<=r)
{
return tr[p].sum;
//printf("%d %d %d %d %d\n",tr[p].l,tr[p].r,l,r,tr[p].sum);
//printf("%d\n",r);
}
push_down(p);
long long s=0;
int mid=tr[p<<1].r;
//printf("mid=%d\n",mid);
if(l<=mid)
{
//printf("l=%d<mid=%d\n",l,mid);
//printf("%d %d %d %d %d\n",tr[p].l,tr[p].r,l,r,tr[p].sum);
s+=query(p<<1,l,mid);
//printf("%d\n",mid);
}
if(r>mid)
{
//printf("r=%d>mid=%d\n",r,mid);
//printf("%d %d %d %d %d\n",tr[p].l,tr[p].r,l,r,tr[p].sum);
s+=query(p<<1|1,mid+1,r);
//printf("%d %d %d\n",tr[p<<1|1].r,r,mid+1);
}
return s;
}
int main()
{
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,1,n);
//for(int i=1;i<=4*n;i++)
// printf("%d %d %d\n",tr[i].l,tr[i].r,tr[i].sum);
while(q--)
{
int k;
scanf("%d",&k);
if(k==1)
{
int l,r,x;
scanf("%d%d%d",&l,&r,&x);
modify(1,l,r,x);
//for(int i=1;i<=4*n;i++)
//printf("%d %d %d\n",tr[i].l,tr[i].r,tr[i].sum);
}
else if(k==2)
{
ans=0;
int l,r;
scanf("%d%d",&l,&r);
printf("%lld\n",query(1,l,r));
}
}
//for(int i=1;i<=4*n;i++)
// if(tr[i].l==tr[i].r&&tr[i].l!=0)printf("%d %d\n",tr[i].l,tr[i].sum);
return 0;
}