#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll INF=1e9+5;
struct node
{
ll pref;
};
ll a[200005];
ll b[200005];
node st[800005];
node merge(node x,node y)
{
return {x.pref+y.pref};
}
void build(ll si,ll ss,ll se)
{
if(ss==se)
{
st[si].pref=a[ss];
return;
}
ll mid=(ss+se)/2;
build(2*si,ss,mid);
build(2*si+1,mid+1,se);
st[si]=merge(st[2*si],st[2*si+1]);
}
node query(ll si,ll ss,ll se,ll qs,ll qe)
{
if(qs>se || ss>qe)
{
return {0};
}
if(ss>=qs && qe>=se)
{
return st[si];
}
ll mid=(ss+se)/2;
node l=query(2*si,ss,mid,qs,qe);
node r=query(2*si+1,mid+1,se,qs,qe);
return merge(l,r);
}
void update(ll si,ll ss,ll se,ll qi,ll nv)
{
if(ss==se)
{
a[ss]=nv;
st[si].pref=a[ss];
return;
}
ll mid=(ss+se)/2;
if(qi<=mid)
{
update(2*si,ss,mid,qi,nv);
}
else
{
update(2*si+1,mid+1,se,qi,nv);
}
st[si]=merge(st[2*si],st[2*si+1]);
}
int main()
{
ll n,m;
cin>>n>>m;
build(1,1,n);
ll c,x,y,v;
while(m--)
{
cin>>c;
if(c==1)
{
cin>>x>>y>>v;
x++;
if(y!=n)
{
update(1,1,n,x,v);
update(1,1,n,y+1,-v);
}
else
{
update(1,1,n,x,v);
}
}
else
{
cin>>x;
x++;
cout<<query(1,1,n,1,x).pref<<"\n";
}
}
return 0;
}