#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int n,m,a[N],t[4*N],lazy[N];
void pushup(int k){
t[k]=t[k*2]+t[k*2+1];
}
void build(int k,int l,int r){
if(l==r) t[k]=a[l];
else{
int m=l+(r-l)/2;
build(k*2,l,m);
build(k*2+1,m+1,r);
pushup(k);
}
}
void pushdown(int k){
if(lazy[k]){
lazy[k*2]+=lazy[k];
lazy[k*2+1]+=lazy[k];
t[k*2]+=lazy[k];
t[k*2+1]+=lazy[k];
lazy[k]=0;
}
}
void updata(int L,int R,int v,int l,int r,int k){
if(L<=l&&r<=R){
lazy[k]+=v;
t[k]+=v;
}
else{
pushdown(k);
int m=l+(r-l)/2;
if(L<=m){
updata(L,R,v,l,m,k<<1);
}
else if(R>m){
updata(L,R,v,m+1,l,k<<1|1);
}
pushup(k);
}
}
int query(int L,int R,int l,int r,int k){
if(L>=l&&r<=R){
return t[k];
}
else{
pushdown(k);
int sum=0;
int m=l+(r-l)/2;
if(l<=m){
sum+=query(L,R,l,m,k<<1);
}
else if(r>m){
sum+=query(L,R,m+1,l,k<<1|1);
}
return sum;
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
while(m--){
int op;
cin>>op;
if(op==1){
int x,y,k;
cin>>x>>y>>k;
updata(x,y,k,1,n,1);
}
else if(op==2){
int x,y;
cin>>x>>y;
cout<<query(x,y,1,n,1)<<endl;
}
}
return 0;
}