#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1e5+5;
int a[MAXN],n,m,ql,qr;
struct tree{
int l,r,w,k,d,flag;
}t[4*MAXN+2];
void pushup(int u){
t[u].w=t[u*2].w+t[u*2+1].w;
}
void build(int u,int l,int r){
t[u].l=l;t[u].r=r;
if(l==r){
t[u].w=a[l];
return;
}
int mid=l+r>>1;
build(u*2,l,mid);
build(u*2+1,mid+1,r);
pushup(u);
}
int sum(int a1,int d,int len){
int an=a1+(len-1)*d;
return (a1+an)*len/2;
}
void maketag(int u,int k,int d){
t[u].k+=k,t[u].d+=d;
t[u].flag=1;
t[u].w+=k;
}
void pushdown(int u){
if(t[u].flag){
maketag(u*2,t[u].k,t[u].d);
maketag(u*2+1,t[u].k+(t[u*2+1].l-t[u*2].l)*t[u].d,t[u].d);
t[u].flag=0,t[u].k=0,t[u].d=0;
}
}
void update(int u,int l,int r,int k,int d){
if(l<=t[u].l && r>=t[u].r){
maketag(u,k,d);
return;
}
pushdown(u);
int mid=t[u].l+t[u].r>>1;
if(l<=mid) update(u*2,l,r,k,d);
if(r>mid) update(u*2+1,l,r,k+(mid+1-t[u].l)*d,d);
pushup(u);
}
int query(int u,int x){
if(x==t[u].l && x==t[u].r) return t[u].w;
pushdown(u);
int mid=t[u].l+t[u].r>>1;
int ans=0;
if(x<=mid) ans+=query(u*2,x);
if(x>mid) ans+=query(u*2+1,x);
return ans;
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
build(1,1,n);
while(m--){
int opt;cin>>opt;
if(opt==1){
int k,d;cin>>ql>>qr>>k>>d;
update(1,ql,qr,k,d);
}
else{
int p;
cin>>p;
cout<<query(1,p)<<endl;
}
}
return 0;
}