#include <iostream>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10 ;
int n, m;
ll u[ maxn] ;
ll t1[ maxn] ;
ll t2[ maxn] ;
ll lowbit ( ll x) {
return x & ( - x) ;
}
void Update ( ll i, ll k) {
ll x = i;
while ( i <= n) {
t1[ i] + = k;
t2[ i] + = k * ( x - 1 ) ;
i + = lowbit ( i) ;
}
}
ll get_sum ( ll i) {
ll sum = 0 , x = i;
while ( i >= 1 ) {
sum + = x * t1[ i] - t2[ i] ;
i - = lowbit ( i) ;
}
return sum;
}
int main ( ) {
cin >> n >> m;
for ( int i = 1 ; i <= n; i++ ) {
cin >> u[ i] ;
}
for ( int i = 1 ; i <= n; i++ ) {
ll d = u[ i] - u[ i - 1 ] ;
Update ( i, d) ;
}
while ( m-- ) {
int sign;
cin >> sign;
if ( sign == 1 ) {
int l, r, k;
cin >> l >> r >> k;
Update ( ( ll) l, k) ;
Update ( ( ll) r + 1ll , - k) ;
}
else {
ll l, r;
cin >> l >> r;
cout << get_sum ( r) - get_sum ( l - 1 ) << endl;
}
}
return 0 ;
}