#include<bits/stdc++.h>
using namespace std;
long long a[200000],tree[600000],laz[600000],s[200001];
void treemake(long long now,long long l,long long r){
if(l==r){
tree[now]=a[l];
return;
}
int mid=(l+r)/2;
treemake(now*2,l,mid);
treemake(now*2+1,mid+1,r);
tree[now]=tree[now*2]+tree[now*2+1];
}
void pull(long long now,long long l,long long r){
if(!laz[now]) return;
int mid=(l+r)/2;
tree[now*2]+=laz[now]*(mid-l+1);
tree[now*2+1]+=laz[now]*(r-mid);
laz[now*2]+=laz[now];
laz[now*2+1]+=laz[now];
laz[now]=0;
}
void t1(long long now,long long l,long long r,long long ll,long long rr,long long kkk){
if(ll<=l&&rr>=r){
laz[now]+=kkk;
tree[now]+=kkk*(r-l+1);
return;
}
pull(now,l,r);
long long mid=(l+r)/2;
if(ll<=mid) t1(now*2,l,mid,ll,rr,kkk);
if(rr>mid) t1(now*2+1,mid+1,r,ll,rr,kkk);
tree[now]=tree[now*2]+tree[now*2+1];
}
long long t2(long long now,long long l,long long r,long long ll,long long rr){
if(ll<=l&&rr>=r){
return tree[now];
}
pull(now,l,r);
long long mid=(l+r)/2,ans=0;
if(ll<=mid) ans+=t2(now*2,l,mid,ll,rr);
if(rr>mid) ans+=t2(now*2+1,mid+1,r,ll,rr);
return ans;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>s[i];
for(int i=1;i<=n;i++) a[i]=s[i]-s[i-1];
treemake(1,1,n);
while(m--){
long long k,ll,rr,d;
cin>>k;
if(k==1){
cin>>ll>>rr>>k>>d;
t1(1,1,n,ll,ll,k);
t1(1,1,n,ll+1,rr,d);
if(rr!=n) t1(1,1,n,rr+1,rr+1,-(k+((rr-ll)*d)));
}
else{
cin>>k;
cout<<t2(1,1,n,1,k)<<endl;
}
}
}
t1修改值,t2求和