#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <vector>
#include <queue>
#include <deque>
#include <cmath>
#include <set>
#include <map>
#include <string>
#define ll long long
#define ld long double
#define sqr(a) (a)*(a)
#define mp make_pair
#define pb push_back
#define pi pair<int,int>
#define x first
#define y second
#define inf (int)1e9
using namespace std;
const int N=1000001;
int n,m,x,t,l,r;
int tree[N],a[N];
void update(int i,int delta)
{
    for(;i<n;i=(i|(i+1)))
        tree[i]+=delta;
}
int get(int r)
{
    int res=0;
    for(;r>=0;r=(r&(r+1))-1)
        res+=tree[r];
    return res;
}

int main()
{
    freopen("segmentupdate.in","r",stdin);
    freopen("segmentupdate.out","w",stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>m;
    for(int i=0;i<n;i++)
        cin>>a[i];
    while(m--)
    {
        cin>>t;
        if(t==1)
        {
            cin>>l>>r>>x;
            l--,r--;
            update(l,x);
            update(r+1,-x);
        }else {
            cin>>x;
            x--;
            cout<<a[x]+get(x)<<"\n";
            //printf("%d\n",a[x]+get(x));
        }
    }
    return 0;
}
