#include<iostream>
#include<algorithm>
using namespace std;
#define long long int
const int N=1e6+10;
struct node{
int tag,tag2;
}tree[4*N];
int n,m,x,y,k,d,op,a[N];
void update(int u,int L,int R,int l,int r,int t1,int t2){
if(l<=L&&r>=R){
tree[u].tag+=t1;
tree[u].tag2+=t2;
return;
}
int mid=(L+R)/2;
if(l<=mid)update(u*2,L,mid,l,r,t1,t2);
if(r>=mid+1)update(u*2+1,mid+1,R,l,r,t1,t2);
}
int query(int u,int l,int r,int p,int t1,int t2){
if(l==r)return t1+tree[u].tag+l*(t2+tree[u].tag2);
if(p<=(l+r)/2)return query(u*2,l,(l+r)/2,p,t1+tree[u].tag,t2+tree[u].tag2);
else return query(u*2+1,(l+r)/2+1,r,p,t1+tree[u].tag,t2+tree[u].tag2);
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
while(m--){
cin>>op;
if(op==1){
cin>>x>>y>>k>>d;
update(1,1,n,x,y,k-d*x,d);
}
else{
cin>>x;
cout<<query(1,1,n,x,0,0)+a[x]<<endl;
}
}
return 0;
}