#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
template <class T>
inline void read(T &res){
char c;bool f=0;
while(!isdigit(c=getchar())) if(c=='-') f=1;
res=(c^48);
while(isdigit(c=getchar())) res=(res<<1)+(res<<3)+(c^48);
if(f) res=~res+1;
}
int n,m,op,l,r,k,d,p;
long long a[N];
struct Tree{
long long num;
long long tag_K,tag_D;
}t[N*4];
#define ls (u<<1)
#define rs (u<<1|1)
#define mid (l+r>>1)
void build(int u,int l,int r){
if(l==r) {read(t[u].num); return ;}
build(ls,l,mid);
build(rs,mid+1,r);
}
void push_down(int u,int l,int r){
if(t[u].tag_D&&t[u].tag_K){
t[ls].tag_K+=t[u].tag_K;
t[ls].tag_D+=t[u].tag_D;
t[rs].tag_K+=t[u].tag_K+(mid+1-l)*t[u].tag_D;
t[rs].tag_D+=t[u].tag_D;
t[u].tag_D=t[u].tag_K=0;
}
}
long long query(int u,int l,int r,int x){
if(l==r){
t[u].num+=t[u].tag_K;
t[u].tag_K=t[u].tag_D=0;
return t[u].num;
}
push_down(u,l,r);
if(x<=mid) return query(ls,l,mid,x);
else return query(rs,mid+1,r,x);
}
void modify(int u,int l,int r,int ql,int qr,int k,int d){
if(l>qr||r<ql) return ;
if(ql<=l&&r<=qr) {t[u].tag_D+=d; t[u].tag_K+=k+(l-ql)*d; return ;}
push_down(u,l,r);
modify(ls,l,mid,ql,qr,k,d);
modify(rs,mid+1,r,ql,qr,k,d);
}
int main(){
read(n);read(m);
build(1,1,n);
for(int i=1;i<=m;i++){
read(op);
if(op==1){
read(l);read(r);read(k);read(d);
modify(1,1,n,l,r,k,d);
}
else{
read(p);
printf("%lld\n",query(1,1,n,p));
}
}
return 0;
}