#include<bits/stdc++.h>
using namespace std;#define MXN 100010#define LL long long
LL A[MXN], d[MXN], df[MXN], ans;int n, m;voidadd(LL* diff,int p, LL val){while(p <= n) diff[p]+= val, p += p &-p;}
LL query(LL* diff,int p){
LL res =0;while(p >0) res += diff[p], p -= p &-p;return res;}intmain(){int op, x, y, k;scanf("%d %d",&n,&m);
A[0]=0;for(int i =1; i <= n; i++){scanf("%lld", A+i);add(d, i, A[i]-A[i-1]);add(df, i, i*(A[i]-A[i-1]));// i*(A[i]-A[i-1]) long long}while(m--){scanf("%d %d %d",&op,&x,&y);if(op ==2){
ans =(y+1)*query(d, y)- x*query(d, x-1);
ans +=query(df, x-1)-query(df, y);printf("%lld\n", ans);}else{scanf("%d",&k);add(d, x, k);add(d, y+1,-k);add(df, x, x*k);add(df, y+1,-(y+1)*k);}}return0;}