#include<bits/stdc++.h>
#define maxn 400005
#define ll long long
using namespace std;
ll n,m,w[maxn],layk[maxn],layd[maxn],a[maxn];
void pushup(int u){
w[u]=w[u*2]+w[u*2+1];
}
void build(int u,int L,int R){
if(L==R){
w[u]=a[L];
return;
}
int mid=(L+R)/2;
build(u*2,L,mid);
build(u*2+1,mid+1,R);
pushup(u);
}
int mo(int k,int d,int len){ //末项
return k+(len-1)*d;
}
void maketag(int u,int k,int d,int len){
layk[u]+=k;
layd[u]+=d;
w[u]=w[u]+(k+mo(k,d,len))*len/2;
}
void pushdown(int u,int L,int R){
int mid=(L+R)/2;
maketag(u*2, layk[u],layd[u],mid-L+1);
maketag(u*2+1,layk[u],layd[u],R-mid);
layk[u]=0;
layd[u]=0;
}
bool OutofRange(int L,int R,int l,int r){
return R<l||r<L;
}
bool InRange(int L,int R,int l,int r){
return l<=L&&R<=r;
}
void update(int u,int L,int R,int l,int r,int k,int d){
if(InRange(L,R,l,r)){
maketag(u,k,d,R-L+1);
return;
}
if(OutofRange(L,R,l,r))return;
pushdown(u,L,R);
int mid=(L+R)/2;
update(u*2, L, mid,l,r,k,d);
update(u*2+1,mid+1,R,l,r,k,d);
pushup(u);
}
ll query(int u,int L,int R,int p){
if(L==R){
return w[u];
}
pushdown(u,L,R);
int mid=(L+R)/2;
if(p<=mid)return query(u*2,L,mid,p);
else return query(u*2+1,mid+1,R,p);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,1,n);
//for(int i=1;i<=n;i++)cout<<query(1,1,n,i)<<" ";
//cout<<endl;
for(int i=1;i<=m;i++){
int opt,l,r,k,d,p;
cin>>opt;
if(opt==1){ //修改
cin>>l>>r>>k>>d;
update(1,1,n,l,r,k,d);
}
else{
cin>>p;
cout<<query(1,1,n,p)<<endl;
}
}
//for(int i=1;i<=n;i++)cout<<query(1,1,n,i)<<" ";
return 0;
}