#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <utility>
#include <map>
#include <queue>
#include <set>
#include <list>
#include <climits>
#include <stack>
#include <bitset>
#include <deque>
#define int long long
using namespace std ;
const int LONG = 1e5 + 5 ;
int n , m ;
int num[100005] ;
inline int read()
{
char ch = getchar() ; int flag = 1 ; int res = 0 ;
while(ch < '0' || ch > '9'){if(ch == '-') flag = -1 ; ch = getchar() ; }
while(ch >= '0' && ch <= '9'){res *= 10 ; res += ch - '0' ; ch = getchar() ; }
return flag * res ;
}
struct seg {
long long l , r , sum = 0 , lazy = 0 ;
} a[400005];
void build (int k , int l , int r)
{
a[k].l = l ; a[k].r = r ; a[k].lazy = 0 ;
if(l == r){a[k].sum = num[l] ; return ; }
int mid = (l + r) >> 1 ;
build(k << 1 , l , mid ) ;
build(k << 1 | 1 , mid + 1 , r ) ;
a[k].sum = a[k << 1].sum + a[k << 1 | 1].sum ;
}
void pushdown(int k)
{
if(a[k].lazy)
{
a[k << 1].sum += (a[k << 1].r - a[k << 1].l + 1) * a[k].lazy ;
a[k << 1 | 1].sum += (a[k << 1 | 1].r - a[k << 1 | 1].l + 1) * a[k].lazy ;
a[k << 1].lazy += a[k].lazy ;
a[k << 1 | 1].lazy += a[k].lazy ;
a[k].lazy = 0 ;
}
}
void add(int k , int l , int r , int ql , int qr , long long x)
{
if(ql <= l && qr >= r){a[k].sum += (r - l + 1) * 1ll*x ; a[k].lazy += 1ll*x ; return ;}
pushdown(k) ;
int mid = (l + r) >> 1 ;
if(ql <= mid)add(k << 1 , l , mid , ql , qr , x) ;
if(qr > mid)add(k << 1 | 1 , mid + 1 , r , ql , qr , x) ;
a[k].sum = a[k << 1].sum + a[k << 1 | 1].sum ;
}
long long summ(int k , int l , int r , int ql , int qr)
{
pushdown(k) ;
if(ql <= l && qr >= r){return a[k].sum ;}
int mid = (l + r) >> 1 ; long long ans = 0 ;
if(ql <= mid)ans += summ(k << 1 , l , mid , ql , qr) ;
if(qr > mid)ans += summ(k << 1 | 1 , mid + 1 , r , ql , qr) ;
return ans ;
}
signed main ()
{
std::ios::sync_with_stdio(false);
n = read() ; m = read() ;
int i = 0 ;
for(i = 1 ; i <= n ; i++)num[i] = read() ;
build(1 , 1 , n) ;
int x , y , z ;
while(m--)
{
int t ; t = read() ;
if(t == 1)
{
x = read() ; y = read() ; z = read() ;
add(1 , 1 , n , x , y , z) ;
}
else
{
x = read() ; y = read() ;
long long ans = 0 ; ans = summ(1 , 1 , n , x , y) ;
printf("%1lld\n" , ans) ;
}
}
return 0 ;
}