wa on3
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e5+7;
struct node{
int l,r;
int sum,lazy;
};
node block[maxn];
int a[maxn];
int b[maxn];
int id[maxn];
void update(int l,int r,int k){
if(id[l]==id[r]){
for(int i=l;i<=r;++i)a[i]+=k,block[id[i]].sum+=k;
return ;
}
for(int i=l;i<=block[id[l]].r;i++)a[i]+=k,block[id[i]].sum+=k;//两边零碎的
for(int i=block[id[r]].l;i<=r;i++)a[i]+=k,block[id[i]].sum+=k;
for(int i=id[l]+1;i<id[r];i++)block[i].lazy+=k;//整块的
return ;
}
int query(int l,int r){
int ans=0;
if(id[l]==id[r]){
for(int i=l;i<=r;++i)ans+=a[i]+block[id[i]].lazy;
return ans;
}
for(int i=l;i<=block[id[l]].r;i++)ans+=a[i]+block[id[i]].lazy;
for(int i=block[id[r]].l;i<=r;i++)ans+=a[i]+block[id[i]].lazy;
for(int i=id[l]+1;i<id[r];i++)ans+=block[i].sum+(block[i].r-block[i].l+1)*block[i].lazy;
return ans;
}
signed main(){
int n,q;
cin>>n>>q;
int block_size=sqrt(n);
for(int i=1;i<=n;++i)cin>>b[i];
for(int i=1;i<=n;++i)a[i]=b[i]-b[i-1];
for(int i=1;i<=n;++i){
id[i]=(i+block_size-1)/block_size;
block[id[i]].sum+=a[i];
}
for(int i=1;i<=id[n];++i){
block[i].r=block_size*i;
block[i].l=block[i-1].r+1;
}
block[id[n]].r=min(block[id[n]].r,n);
while(q--){
int op,l,r,k;
cin>>op;
if(op==1){
int l,r,k,d;
cin>>l>>r>>k>>d;
update(l,l,k);
if(l+1<=n)update(l+1,r,d);
if(r+1<=n)update(r+1,r+1,-((r-l)*d+k));
}
else{
int x;
cin>>x;
cout<<query(1,x)<<endl;
}
}
return 0;
}