#include <iostream>
#include <math.h>
#include <algorithm>
#include <cstdio>
using namespace std;
#define maxn 1000005
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
int n,m;
int val,nowl,nowr;
int a[16*maxn];
long long sum[16*maxn],col[16*maxn];
void update(int rt){
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void build(int l,int r,int rt){
if(l==r){
sum[rt]=a[l];
return;
}
int mid=(l+r)>>1;
build(lson);
build(rson);
update(rt);
}
void color(int l,int r,int rt,int c){
sum[rt]+=c*(r-l+1);
col[rt]+=c;
}
void push_col(int l,int r,int rt){
if(col[rt]){
int mid=(r+l)>>1;
color(lson,col[rt]);
color(rson,col[rt]);
col[rt]=0;
}
}
int query(int l,int r,int rt){
if(nowl<=l&&r<=nowr) return sum[rt];
push_col(l,r,rt);
int mid=(r+l)>>1,ans=0;
if(nowl<=mid) ans+=query(lson);
if(mid+1<=nowr) ans+=query(rson);
return ans;
}
void modify(int l,int r,int rt,int c){
if(nowl<=l&&r<=nowr){color(l,r,rt,c);return;}
push_col(l,r,rt);
int mid=(r+l)>>1;
if(nowl<=mid) modify(lson,c);
if(mid+1<=nowr) modify(rson,c);
update(rt);
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
build(1,n,1);
for(int i=1;i<=m;++i){
int op;
scanf("%d %d %d",&op,&nowl,&nowr);
if(op==1){
scanf("%d",&val);
modify(1,n,1,val);
}
else{
printf("%d\n",query(1,n,1));
}
}
}