全wa
#include<bits/stdc++.h>
using namespace std;
inline long long read(){
long long x=0;
int f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
return x*f;
}
const int N=400010;
int a[N];
struct node{
long long sum,tagk,tagd;
}tree[N];
void build(int rt,int l,int r){
if(l==r){
tree[rt].sum=a[l];
return ;
}
int mid=l+r>>1;
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;
}
void pushdown(int rt,int l,int r,int x){
int mid=l+r>>1;
tree[rt<<1].tagk+=tree[rt].tagk;
tree[rt<<1].tagd+=tree[rt].tagd;
tree[rt<<1].sum+=(2*tree[rt].tagk+(l+mid-2*x)*tree[rt].tagd)*(mid-l+1)/2;
tree[rt<<1|1].tagk+=tree[rt].tagk;
tree[rt<<1|1].tagd+=tree[rt].tagd;
tree[rt<<1|1].sum+=(2*tree[rt].tagk+(r+mid+1-2*x)*tree[rt].tagd)*(r-mid)/2;
tree[rt].tagk=tree[rt].tagd=0;
}
void modify(int rt,int l,int r,int x,int y,long long k,long long d){
//ai=k+(i-l)*d
//sumL,R=(2*k+(L+R-2*l)*d)*(R-L+1)/2
if(x<=l&&r<=y){
tree[rt].tagk+=k;
tree[rt].tagd+=d;
tree[rt].sum+=(2*k+(l+r-2*x)*d)*(r-l+1)/2;
return ;
}
if(tree[rt].tagk!=0||tree[rt].tagd!=0) pushdown(rt,l,r,x);
int mid=l+r>>1;
if(x<=mid) modify(rt<<1,l,mid,x,y,k,d);
if(y>mid) modify(rt<<1|1,mid+1,r,x,y,k,d);
tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;
}
long long query(int rt,int l,int r,int x,int y){
if(x<=l&&r<=y)return tree[rt].sum;
if(tree[rt].tagk!=0||tree[rt].tagd!=0) pushdown(rt,l,r,x);
int mid=l+r>>1;
long long det=0;
if(x<=mid) det+=query(rt<<1,l,mid,x,y);
if(y>mid) det+=query(rt<<1|1,mid+1,r,x,y);
return det;
}
int main(){
// freopen("P1438_1.in","r",stdin);
cout.tie(0);
int n=read(),m=read();
for(int i=1;i<=n;i++) a[i]=read();
build(1,1,n);
while(m--){
int op=read();
if(op==1){
int x=read(),y=read();
long long k=read(),d=read();
modify(1,1,n,x,y,k,d);
}
else {
int x=read();
cout<<query(1,1,n,x,x)<<"\n";
}
}
return 0;
}