#include <iostream>
using namespace std;
const int maxn=1e5+5;
int val[maxn],tag[maxn];
void pushdown(int u,int l,int r) {
	if(tag[u]) {
		val[u]+=tag[u]*(r-l+1);
		tag[u*2]=tag[u];
		tag[u*2+1]=tag[u];
		tag[u]=0;
	}
}
void update(int u,int l,int r,int s,int t,int x) {
	if(s<=l&&r<=t) {
		val[u]+=x*(r-l+1);
		tag[u]+=x;
		return;
	}
	int mid=(l+r)/2;
	pushdown(u,l,r);
	if(s<=mid)update(u*2,l,mid,s,t,x);
	if(t>mid)update(u*2+1,mid+1,r,s,t,x);
}
int query(int u,int l,int r,int s,int t) {
	if(s<=l&&r<=t) {
		return val[u];
	}
	int mid=(l+r)/2;
	pushdown(u,l,r);
	if(s<=mid)return query(u*2,l,mid,s,t);
	if(t>mid)return query(u*2+1,mid+1,r,s,t);
	return query(u*2,l,mid,s,t)+query(u*2+1,mid+1,r,s,t);
}
int main() {
	int n,q;
	cin>>n>>q;
	for(int i=1; i<=n; i++) {
		int x;
		cin>>x;
		update(1,1,n,i,i,x);
	}
	while(q--) {
		int op;
		cin>>op;
		if(op==1) {
			int l,r,x;
			cin>>l>>r>>x;
			update(1,1,n,l,r,x);
		}
		if(op==2) {
			int l,r;
			cin>>l>>r;
			cout<<query(1,1,n,l,r)<<endl;
		}
		/*
		for(int i=1; i<=n; i++) {
			cout<<query(1,1,n,i,i)<<" ";
		}
		cout<<endl;
		*/
	}
}