#include <bits/stdc++.h>
#define ll long long
#define rep(i,n) for(ll (i)=0;(i)<(n);++(i))
using namespace std;

template<typename T>
struct segment_tree{
    function<T(T,T)> f = [](T a, T b){return min(a,b);};
    T inf=0;
    vector<T> value;
    int N;
    segment_tree(int n){
        N=1;
        while(N<n)N*=2;
        value.assign(2*N-1,inf);
    }
    segment_tree(int n, function<T(T,T)> func, T t1){
        N=1;
            while(N<n)N*=2;
        value.assign(2*N-1,t1);
        f=func;
        inf=t1;
    }
    ll update(int i){
        ll ans=0;
        i+=N-1;
        ans+=value[i];
        while(i>0){
            i=(i-1)/2;
            ans+=value[i];
        }
        return ans;
    }
    void query(T a,T b,ll n){
        return query(a,b,0,0,N,n);
    }
    void query(T a,T b, int k, int l, int r, ll n){
        if(r<=a || b<=l)return;
        if(a<=l && r<=b){
            value[k]+=n;
        }else{
            query(a,b,2*k+1,l,(l+r)/2,n);
            query(a,b,2*k+2,(l+r)/2,r,n);
        }
    }
    void print(){
        for(int i=0;i<ceil(log2(N))+1;i++){
            for(int j=0;j<(1<<i);j++){
                cout<<value[j+(1<<i)-1]<<((j==(1<<i)-1)?"":",");
            }
            cout<<endl;
        }
    }
};

int main(){
    ll n,q;
    cin>>n>>q;
    segment_tree<ll> tree(n);
    rep(i,q){
        ll com;
        cin>>com;
        if(com==0){
            ll s,t,x;
            cin>>s>>t>>x;
            tree.query(s-1, t, x);
        }else{
            ll i;
            cin>>i;
            cout<<tree.update(i-1)<<endl;;
        }
    }
}

