//#pragma GCC optimize(3)//O3//#pragma GCC optimize(2)//O2#include<iostream>#include<string>#include<map>#include<set>//#include<unordered_map>#include<queue>#include<cstdio>#include<vector>#include<cstring>#include<stack>#include<algorithm>#include<iomanip>#include<cmath>#include<fstream>#defineXfirst#defineYsecond#definebest131#defineINF0x3f3f3f3f3f3f3f3f#definepiipair<int,int>#definelowbit(x) x &-x#defineinf0x3f3f3f3f#defineintlonglong//#define double long double//#define rep(i,x,y) for(register int i = x; i <= y;++i)usingnamespace std;typedeflonglong ll;typedefunsignedlonglong ull;constdouble pai=acos(-1.0);constint maxn=1e6+10;constint mod=998244353;constdouble eps=1e-9;constint N=5e3+10;/*--------------------------------------------*/inlineintread(){int k =0, f =1;char c =getchar();while(!isdigit(c)){if(c =='-') f =-1;c =getchar();}while(isdigit(c)) k =(k <<1)+(k <<3)+ c -48,c =getchar();return k * f ;}/*--------------------------------------------*/int n,q,a[maxn],c1[maxn],c2[maxn];voidadd(int x,int val){for(int i=x;i<=n;i+=lowbit(i))c1[i]+=val,c2[i]+=val*(x-1);}intgetsum(int x){int sum=0;for(int i=x;i>=1;i-=lowbit(i))sum+=x*c1[i]-c2[i];return sum;}signedmain(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>q;a[0]=0;for(int i=1;i<=n;i++){cin>>a[i];add(i,a[i]-a[i-1]);}while(q--){int op,x,y,k;cin>>op>>x>>y;if(op==1)cin>>k,add(x,k),add(y+1,-k);elsecout<<getsum(y)-getsum(x-1)<<endl;}return0;}