#include<bits/stdc++.h>
using namespace std;
const int N = 114514;
long long cnt,n,m,a[N],cn[N],lazy[N],sum[N];
void update(long long x,long long y,long long z){
for(int i = x;i <= min(y,cn[x] * cnt);i++){
a[i] += z,sum[cn[x]] += z;
}
if(cn[x] != cn[y]){
for(int i = (cn[y] - 1) * cnt + 1;i <= y;i++){
a[i] += z,sum[cn[y]] += z;
}
}
for(int i = cn[x] + 1;i < cn[y];i++){
lazy[i] += z;
}
}
long long query(long long x,long long y){
long long ans = 0;
for(int i = x;i <= min(y,cn[x] * cnt);i++){
ans += a[i] + lazy[cn[x]];
}
if(cn[x] != cn[y]){
for(int i = (cn[y] - 1) * cnt + 1;i <= y;i++){
ans += a[i] + lazy[cn[y]];
}
}
for(int i = cn[x] + 1;i < cn[y];i++){
ans += sum[i] + lazy[i] * cnt;
}
}
int main(){
cin>>n>>m;
cnt = sqrt(n);
for(int i = 1;i <= n;i++){
cn[i] = (i - 1) / cnt + 1;
}
for(int i = 1;i <= n;i++){
cin >> a[i];
sum[cn[i]] += a[i];
}
while(m--){
int op,x,y;
cin>>op>>x>>y;
if(op == 1){
long long z;
cin >> z;
update(x,y,z);
}
else {
cout<<query(x,y)<<endl;
}
}
}
求调