#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;
}