#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int A[N];
int Sum[4*N];
int n,m;
int Add[(N<<2)+10];
void PushUp(int rt)
{
Sum[rt]=Sum[rt<<1]+Sum[rt<<1|1];
}
void PushDown(int rt,int ln,int rn)
{
if(Add[rt])
{
Add[rt<<1]+=Add[rt];
Add[rt<<1|1]+=Add[rt];
Sum[rt<<1]+=Add[rt]*ln;
Sum[rt<<1|1]+=Add[rt]*rn;
Add[rt]=0;
}
}
void Build(int l,int r,int rt)
{
if(l==r)
{
Sum[rt]=A[r];
return;
}
int m=(l+r)>>1;
Build(l,m,rt<<1);
Build(m+1,r,rt<<1|1);
PushUp(rt);
}
int Update(int L,int R,int C,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
return Sum[rt];
}
int m=(l+r)>>1;
PushDown(rt,l,r);
if(L<=m)
{
Update(L,R,C,l,m,rt<<1);
}
if(R>m)
{
Update(L,R,C,m+1,r,rt<<1|1);
}
PushUp(rt);
}
int Query(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
return Sum[rt];
}
int m=(l+r)>>1;
PushDown(rt,l,r);
int ANS=0;
if(L<=m)
{
ANS+=Query(L,R,l,m,rt<<1);
}
if(R>m)
{
ANS+=Query(L,R,m+1,r,rt<<1|1);
}
return ANS;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>A[i];
}
Build(1,n,1);
for(int i=1;i<=m;i++)
{
int a,x;
cin>>a>>x;
if(a==1)
{
int y,k;
cin>>y>>k;
Update(x,y,k,1,n,1);
}
else
{
int y;
cin>>y;
cout<<Query(x,y,1,n,1)<<endl;
}
}
return 0;
}