#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int a[114514];
int qzh[114514];
struct node{
int id;
int l;
int r;
int tag;
int sum;
}tree[4*114514];
void pushup(int now){
tree[now].sum=tree[now*2].sum+tree[now*2+1].sum;
}
void pushdown(int now){
tree[now*2].tag+=tree[now].tag;
tree[now*2].sum+=tree[now].tag*(tree[now*2].r-tree[now*2].l+1);
tree[now*2+1].tag+=tree[now].tag;
tree[now*2+1].sum+=tree[now].tag*(tree[now*2+1].r-tree[now*2+1].l+1);
tree[now].tag=0;
}
void build(int now,int l,int r){
tree[now].id=now;
tree[now].l=l;
tree[now].r=r;
if(l==r){
tree[now].sum=qzh[l];
return;
}
int mid=l+r>>1;
build(now*2,l,mid);
build(now*2+1,mid+1,r);
pushup(now);
return;
}
void modify(int now,int l,int r,int k){
int l1=tree[now].l;
int r1=tree[now].r;
pushdown(now);
if(l1==l&&r1==r){
tree[now].tag+=k;
tree[now].sum+=k*(r1-l1+1);
return;
}
int mid=l1+r1>>1;
if(l<=mid) modify(now*2,l,min(mid,r),k);
if(r>mid) modify(now*2+1,max(mid+1,l),r,k);
pushup(now);
return;
}
int query(int now,int l,int r){
int l1=tree[now].l;
int r1=tree[now].r;
pushdown(now);
if(l1==l&&r1==r){
return tree[now].sum;
}
int mid=l1+r1>>1;
int ans=0;
if(l<=mid) ans+=query(now*2,l,min(mid,r));
if(r>mid) ans+=query(now*2+1,max(l,mid+1),r);
pushup(now);
return ans;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
qzh[i]=a[i]-a[i-1];
}
build(1,1,n);
for(int i=1;i<=m;i++){
int op;
cin>>op;
if(op==1){
int l,r,k,d;
cin>>l>>r>>k>>d;
modify(1,l,l,k);
if(l<r) modify(1,l+1,r,d);
}
else{
int p;
cin>>p;
cout<<query(1,1,p)<<endl;
}
}
return 0;
}