#include <iostream>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <algorithm>
#include <array>
using namespace std;

#define REP(i,n) for(int i=0; i<n; ++i)
#define FOR(i,a,b) for(int i=a; i<=b; ++i)
#define FORR(i,a,b) for (int i=a; i>=b; --i)
#define ALL(c) (c).begin(), (c).end()

typedef long long ll;
typedef vector<int> VI;
typedef vector<ll> VL;
typedef vector<VI> VVI;
typedef vector<VL> VVL;
typedef pair<int,int> P;
typedef pair<ll,ll> PL;


struct SqrtDecomposition{
    const ll INF = 1e18;
    int n, sqrtn, k;
    VL dat, buk, lazy;
    vector<bool> lazyflag;

    void init(int x){
        n = x;
        sqrtn = sqrt(n);
        k = (n + sqrtn - 1) / sqrtn;
        dat.assign(sqrtn * k, 0);
        buk.assign(k, 0);
        lazy.assign(k, 0);
        lazyflag.assign(k, false);
    }

    void eval(int b){
        if (!lazyflag[b]) return;
        lazyflag[b] = false;
        FOR(i, sqrtn * b, sqrtn * (b+1) - 1){
            dat[i] += lazy[b];
        }
        lazy[b] = 0;
    }

    // [l, r)
    void update(int l, int r, ll x){
        REP(b,k){
            int p = sqrtn * b;
            int q = sqrtn * (b+1);
            if (q <= l || r <= p) continue;
            if (l <= p && q <= r){
                buk[b] += x;
                lazyflag[b] = true;
                lazy[b] += x;
            }else{
                eval(b);
                FOR(i,max(l,p),min(r,q)-1){
                    dat[i] += x;
                }
                buk[b] = INF;
                FOR(i,p,q-1){
                    buk[b] = min(buk[b], dat[i]);
                }
            }
        }
    }

    // [l, r)
    ll query(int l, int r){
        ll ret = INF;
        REP(b,k){
            int p = sqrtn * b;
            int q = sqrtn * (b+1);
            if (q <= l || r <= p) continue;
            if (l <= p && q <= r){
                ret = min(ret, buk[b]);
            }else{
                eval(b);
                FOR(i,max(l,p),min(r,q)-1){
                    ret = min(ret, dat[i]);
                }
            }
        }
        return ret;
    }
};

int main() {
    int n, q;
    cin >> n >> q;
    SqrtDecomposition sd;
    sd.init(n);
    while (q--){
        int t;
        cin >> t;
        if (t == 1){
            int x;
            cin >> x;
            cout << sd.query(x-1,x) << endl;
        }else{
            int l, r, x;
            cin >> l >> r >> x;
            sd.update(l-1, r, x);
        }
    }

    // int n;
    // cin >> n;
    // VL a(n);
    // REP(i,n) scanf("%lld", &a[i]);

    // int A, B;
    // cin >> A;
    // vector<pair<P, P>> add(A);
    // REP(i,A){
    //     int l, r, x;
    //     scanf("%d %d %d", &l, &r, &x);
    //     add[i] = make_pair(P(l-1, r), P(i+1, x));
    // }
    // sort(ALL(add));

    // cin >> B;
    // vector<pair<P, P>> qry(B);
    // REP(i,B){
    //     int s, t, k;
    //     scanf("%d %d %d", &s, &t, &k);
    //     qry[i] = make_pair(P(k-1, i), P(s-1, t+1));
    // }
    // sort(ALL(qry));

    // SqrtDecomposition sd;
    // sd.init(A+1);

    // set<P> st;

    // VL ans(B);
    // int j = 0;
    // REP(i,B){
    //     int k = qry[i].first.first;
    //     while (!st.empty()){
    //         if (st.begin()->first <= k){
    //             int id = st.begin()->second;
    //             // printf("erase %d %d\n", add[id].second.first, -add[id].second.second);
    //             sd.update(add[id].second.first, A+1, -add[id].second.second);
    //             st.erase(st.begin());
    //         }else{
    //             break;
    //         }
    //     }
    //     while (j < A && add[j].first.first <= k){
    //         // printf("left %d right %d time %d add %d\n", add[j].first.first, add[j].first.second,
    //         //     add[j].second.first, add[j].second.second);
    //         sd.update(add[j].second.first, A+1, add[j].second.second);
    //         st.insert(P(add[j].first.second, j));
    //         j++;
    //     }
    //     ans[qry[i].first.second] = sd.query(qry[i].second.first, qry[i].second.second) + a[k];

    //     // cout << k << endl;
    //     // REP(i,A+1) cout << sd.query(i,i+1) << " ";
    //     // cout << endl;
    // }

    // REP(i,B) printf("%lld\n", ans[i]);

    return 0;
}

Measured memory_bytes: 3640