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