#include<bits/stdc++.h>
#define ll long long
using namespace std;
int const N=500000+10;
ll t[N]={};
struct maker{
ll sum,chazhi;
}tree[N*4];
maker hbup(maker a,maker b)//上导
{
maker c;
c.sum=a.sum+b.sum;
return c;
}
void build(int l,int r,int k)
{
if(l==r)
{
tree[k].sum=t[l];
tree[k].chazhi=0;
return;
}
int mid=(l+r)>>1;
build(l,mid,k<<1);
build(mid+1,r,k<<1|1);
tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum;
}
void hbdown(int a,int b,int c,int l,int r)//下导
{
tree[b].chazhi+=tree[a].chazhi;
tree[c].chazhi+=tree[a].chazhi;
int mid=(l+r)>>1;
tree[b].sum+=(mid-l+1)*tree[a].chazhi;
tree[c].sum+=(r-(mid+1)+1)*tree[a].chazhi;
tree[a].sum+=(r-l+1)*tree[a].chazhi;
tree[a].chazhi=0;
}
void updata(int l,int r,int a,int b,int k,ll upp)//更新
{
if(a<=l&&r<=b)
{
tree[k].chazhi+=upp;
hbdown(k,k<<1,k<<1|1,l,r);
return;
}
int mid=(l+r)>>1;
if(a>mid) updata(mid+1,r,a,b,k<<1|1,upp);
else
{
if(b<=mid) updata(l,mid,a,b,k<<1,upp);
else
{
updata(l,mid,a,b,k<<1,upp);
updata(mid+1,r,a,b,k<<1|1,upp);
}
}
}
ll qjhz(int l,int r,int a,int b,int k)//区间求值
{
if(l==r&&l==b) return tree[k].sum;
hbdown(k,k<<1,k<<1|1,l,r);
int mid=(l+r)>>1;
if(a>mid) return qjhz(mid+1,r,a,b,k<<1|1);
if(b<=mid) return qjhz(l,mid,a,b,k<<1);
return qjhz(l,mid,a,b,k<<1)+qjhz(mid+1,r,a,b,k<<1|1);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%lld",&t[i+1]);
build(1,n,1);
for(int i=0;i<m;i++)
{
int pdd;
scanf("%d",&pdd);
if(pdd==1)
{
int l,r;
ll k;
scanf("%d%d%lld",&l,&r,&k);
updata(1,n,l,r,1,k);
}
if(pdd==2)
{
int l;
scanf("%d",&l);
printf("%lld\n",qjhz(1,n,l,l,1));
}
}
return 0;
}