#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5e5+5;
int n,m;
int v[maxn<<2],lz[maxn<<2],a[maxn];
void build(int x,int l,int r);
void update(int x);
void download(int x,int l,int r);
void add(int x,int l,int r,int ql,int qr,int c);
int query(int x,int l,int r,int ql,int qr);
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=n;i;i--){
a[i]=a[i]-a[i-1];
}
build(1,1,n);
while(m--){
int opt;
cin>>opt;
if(opt==1){
int l,r,k,d;
cin>>l>>r>>k>>d;
add(1,1,n,l,l,k);
if(l!=n)add(1,1,n,l+1,r,d);
if(l!=n)add(1,1,n,r+1,r+1,-k-d*(r-l));
}else{
int p;
cin>>p;
cout<<query(1,1,n,1,p)<<'\n';
}
}
return 0;
}
void build(int x,int l,int r){
if(l==r){
v[x]=a[l];
return ;
}
int mid=(l+r)>>1;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
update(x);
}
void update(int x){
v[x]=v[x<<1]+v[x<<1|1];
}
void download(int x,int l,int r){
int mid=(l+r)>>1;
v[x<<1]+=lz[x]*(mid-l+1),v[x<<1|1]+=lz[x]*(r-mid);
lz[x<<1]+=lz[x],lz[x<<1|1]+=lz[x];
lz[x]=0;
}
void add(int x,int l,int r,int ql,int qr,int c){
if(ql<=l && qr>=r){
v[x]+=c*(r-l+1);
lz[x]+=c;
return ;
}
download(x,l,r);
int mid=(l+r)>>1;
if(ql<=mid)add(x<<1,l,mid,ql,qr,c);
if(qr>mid)add(x<<1|1,mid+1,r,ql,qr,c);
update(x);
}
int query(int x,int l,int r,int ql,int qr){
if(ql<=l && qr>=r){
return v[x];
}
download(x,l,r);
int mid=(l+r)>>1;
int res=0;
if(ql<=mid)res+=query(x<<1,l,mid,ql,qr);
if(qr>mid)res+=query(x<<1|1,mid+1,r,ql,qr);
return res;
}