#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <map>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <bitset>
#include <climits>
#include <string.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define pb(a) push_back(a)
int N = 1e5 + 1 ;
int mod = 998244353 ;
const ll inf = LLONG_MAX;
int mult( int a, int b)
{
return a * 1LL * b % mod;
}
int sum( int a, int b)
{
return ( ( a % mod) + ( b % mod) ) % mod;
}
int mus( int a, int b)
{
return ( ( ( a % mod) - ( b % mod) ) + mod) % mod;
}
int binpow( int a, int n)
{
if ( n == 0 )
return 1 ;
if ( n % 2 == 1 )
return binpow( a, n - 1 ) * 1LL * a % mod;
else
{
int b = binpow( a, n / 2 ) ;
return b * 1LL * b % mod;
}
}
ll gcd( ll a, ll b)
{
if ( a == 0 )
return b;
if ( b == 0 )
return a;
if ( a > b)
return gcd( a % b, b) ;
return gcd( a, b % a) ;
}
struct segtreex{
int NO_OP = - 1 ;
struct node{
int set;
int mx;
} ;
vector< node> t;
int size;
void init( int n) {
size = 1 ;
while ( size < n) {
size * = 2 ;
}
t.assign ( 2 * size - 1 , { NO_OP, 0 } ) ;
for ( int i = size - 1 ; i < 2 * size - 1 ; i++ ) {
t[ i] .set = 0 ;
}
}
void push( int x) {
if ( t[ x] .set == NO_OP)
return ;
t[ 2 * x + 1 ] .mx = t[ x] .set ;
t[ 2 * x + 2 ] .mx = t[ x] .set ;
t[ 2 * x + 1 ] .set = t[ x] .set ;
t[ 2 * x + 2 ] .set = t[ x] .set ;
t[ x] .set = NO_OP;
}
void modify( int l, int r, int v, int x, int lx, int rx) {
if ( l >= rx || lx >= r)
return ;
if ( l <= lx && rx <= r) {
t[ x] .set = v;
t[ x] .mx = v;
return ;
}
push( x) ;
int m = ( lx + rx) / 2 ;
modify( l, r, v, 2 * x + 1 , lx, m) ;
modify( l, r, v, 2 * x + 2 , m, rx) ;
t[ x] .mx = max( t[ 2 * x + 1 ] .mx , t[ 2 * x + 2 ] .mx ) ;
}
void modify( int l, int r, int v) {
modify( l, r, v, 0 , 0 , size) ;
}
int getmax( int l, int r, int x, int lx, int rx) {
if ( l >= rx || r <= lx)
return - 1 ;
if ( l <= lx && rx <= r) {
return t[ x] .mx ;
}
push( x) ;
int m = ( lx + rx) / 2 ;
int mxl = getmax( l, r, 2 * x + 1 , lx, m) ;
int mxr = getmax( l, r, 2 * x + 2 , m, rx) ;
return max( mxl, mxr) ;
}
int getmax( int l, int r) {
return getmax( l, r, 0 , 0 , size) ;
}
} ;
struct segtreey{
unordered_map< ll, ll> t;
ll size;
void init( ll n) {
size = 1 ;
while ( size < n)
size * = 2 ;
}
void add( ll l, ll r, ll x, ll lx, ll rx, ll v) {
if ( l >= rx || lx >= r) {
return ;
}
if ( l <= lx && rx <= r) {
t[ x] + = v;
return ;
}
ll m = ( lx + rx) / 2 ;
add( l, r, 2 * x + 1 , lx, m, v) ;
add( l, r, 2 * x + 2 , m, rx, v) ;
}
void add( ll l, ll r, ll v) {
add( l, r, 0 , 0 , size, v) ;
}
ll gety( ll i, ll x, ll lx, ll rx) {
if ( lx + 1 == rx) {
return t[ x] ;
}
ll m = ( lx + rx) / 2 ;
if ( i < m)
return gety( i, 2 * x + 1 , lx, m) + t[ x] ;
else
return gety( i, 2 * x + 2 , m, rx) + t[ x] ;
}
ll gety( ll i) {
return gety( i, 0 , 0 , size) ;
}
} ;
int main( )
{
ios_base:: sync_with_stdio ( false ) ;
cin .tie ( 0 ) ;
int n, q;
cin >> n >> q;
segtreex tx;
segtreey ty;
tx.init ( n) ;
ty.init ( 1e11 ) ;
while ( q-- ) {
int t;
cin >> t;
if ( t == 1 ) {
int l, r, h;
cin >> l >> r >> h;
int top = tx.getmax ( l - 1 , r) ;
tx.modify ( l - 1 , r, top + h) ;
ty.add ( top + 1 , top + h + 1 , r - l + 1 ) ;
} else {
int y;
cin >> y;
cout << ty.gety ( y) << '\n ' ;
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxiaXRzZXQ+CiNpbmNsdWRlIDxjbGltaXRzPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CgojZGVmaW5lIHBiKGEpIHB1c2hfYmFjayhhKQoKaW50IE4gPSAxZTUgKyAxOwppbnQgbW9kID0gOTk4MjQ0MzUzOwpjb25zdCBsbCBpbmYgPSBMTE9OR19NQVg7CgppbnQgbXVsdChpbnQgYSwgaW50IGIpCnsKCXJldHVybiBhICogMUxMICogYiAlIG1vZDsKfQoKaW50IHN1bShpbnQgYSwgaW50IGIpCnsKCXJldHVybiAoKGEgJSBtb2QpICsgKGIgJSBtb2QpKSAlIG1vZDsKfQoKaW50IG11cyhpbnQgYSwgaW50IGIpCnsKCXJldHVybiAoKChhICUgbW9kKSAtIChiICUgbW9kKSkgKyBtb2QpICUgbW9kOwp9CgppbnQgYmlucG93KGludCBhLCBpbnQgbikKewoJaWYgKG4gPT0gMCkKCQlyZXR1cm4gMTsKCWlmIChuICUgMiA9PSAxKQoJCXJldHVybiBiaW5wb3coYSwgbiAtIDEpICogMUxMICogYSAlIG1vZDsKCWVsc2UKCXsKCQlpbnQgYiA9IGJpbnBvdyhhLCBuIC8gMik7CgkJcmV0dXJuIGIgKiAxTEwgKiBiICUgbW9kOwoJfQp9CgpsbCBnY2QobGwgYSwgbGwgYikKewoJaWYgKGEgPT0gMCkKCQlyZXR1cm4gYjsKCWlmIChiID09IDApCgkJcmV0dXJuIGE7CglpZiAoYSA+IGIpCgkJcmV0dXJuIGdjZChhICUgYiwgYik7CglyZXR1cm4gZ2NkKGEsIGIgJSBhKTsKfQoKc3RydWN0IHNlZ3RyZWV4ewoJaW50IE5PX09QID0gLTE7CgoJc3RydWN0IG5vZGV7CgkJaW50IHNldDsKCQlpbnQgbXg7Cgl9OwoKCXZlY3Rvcjxub2RlPiB0OwoJaW50IHNpemU7Cgl2b2lkIGluaXQoaW50IG4pewoJCXNpemUgPSAxOwoJCXdoaWxlKHNpemUgPCBuKXsKCQkJc2l6ZSAqPSAyOwoJCX0KCQl0LmFzc2lnbigyICogc2l6ZSAtIDEsIHtOT19PUCwgMH0pOwoJCWZvcihpbnQgaSA9IHNpemUgLSAxOyBpIDwgMiAqIHNpemUgLSAxOyBpKyspewoJCQl0W2ldLnNldCA9IDA7CgkJfQoJfQoKCXZvaWQgcHVzaChpbnQgeCl7CgkJaWYodFt4XS5zZXQgPT0gTk9fT1ApCgkJCXJldHVybjsKCQl0WzIgKiB4ICsgMV0ubXggPSB0W3hdLnNldDsKCQl0WzIgKiB4ICsgMl0ubXggPSB0W3hdLnNldDsKCQl0WzIgKiB4ICsgMV0uc2V0ID0gdFt4XS5zZXQ7CgkJdFsyICogeCArIDJdLnNldCA9IHRbeF0uc2V0OwoJCXRbeF0uc2V0ID0gTk9fT1A7Cgl9CgoJdm9pZCBtb2RpZnkoaW50IGwsIGludCByLCBpbnQgdiwgaW50IHgsIGludCBseCwgaW50IHJ4KXsKCQlpZihsID49IHJ4IHx8IGx4ID49IHIpCgkJCXJldHVybjsKCQlpZihsIDw9IGx4ICYmIHJ4IDw9IHIpewoJCQl0W3hdLnNldCA9IHY7CgkJCXRbeF0ubXggPSB2OwoJCQlyZXR1cm47CgkJfQoJCXB1c2goeCk7CgkJaW50IG0gPSAobHggKyByeCkgLyAyOwoJCW1vZGlmeShsLCByLCB2LCAyICogeCArIDEsIGx4LCBtKTsKCQltb2RpZnkobCwgciwgdiwgMiAqIHggKyAyLCBtLCByeCk7CgkJdFt4XS5teCA9IG1heCh0WzIgKiB4ICsgMV0ubXgsIHRbMiAqIHggKyAyXS5teCk7Cgl9CgoJdm9pZCBtb2RpZnkoaW50IGwsIGludCByLCBpbnQgdil7CgkJbW9kaWZ5KGwsIHIsIHYsIDAsIDAsIHNpemUpOwoJfQoKCWludCBnZXRtYXgoaW50IGwsIGludCByLCBpbnQgeCwgaW50IGx4LCBpbnQgcngpewoJCWlmKGwgPj0gcnggfHwgciA8PSBseCkKCQkJcmV0dXJuIC0xOwoJCWlmKGwgPD0gbHggJiYgcnggPD0gcil7CgkJCXJldHVybiB0W3hdLm14OwoJCX0KCQlwdXNoKHgpOwoJCWludCBtID0gKGx4ICsgcngpIC8gMjsKCQlpbnQgbXhsID0gZ2V0bWF4KGwsIHIsIDIgKiB4ICsgMSwgbHgsIG0pOwoJCWludCBteHIgPSBnZXRtYXgobCwgciwgMiAqIHggKyAyLCBtLCByeCk7CgkJcmV0dXJuIG1heChteGwsIG14cik7Cgl9CgoJaW50IGdldG1heChpbnQgbCwgaW50IHIpewoJCXJldHVybiBnZXRtYXgobCwgciwgMCwgMCwgc2l6ZSk7Cgl9Cn07CgpzdHJ1Y3Qgc2VndHJlZXl7Cgl1bm9yZGVyZWRfbWFwPGxsLCBsbD4gdDsKCWxsIHNpemU7CgoJdm9pZCBpbml0KGxsIG4pewoJCXNpemUgPSAxOwoJCXdoaWxlKHNpemUgPCBuKQoJCQlzaXplICo9IDI7Cgl9CgoJdm9pZCBhZGQobGwgbCwgbGwgciwgbGwgeCwgbGwgbHgsIGxsIHJ4LCBsbCB2KXsKCQlpZihsID49IHJ4IHx8IGx4ID49IHIpewoJCQlyZXR1cm47CgkJfQoJCWlmKGwgPD0gbHggJiYgcnggPD0gcil7CgkJCXRbeF0gKz0gdjsKCQkJcmV0dXJuOwoJCX0KCQlsbCBtID0gKGx4ICsgcngpIC8gMjsKCQlhZGQobCwgciwgMiAqIHggKyAxLCBseCwgbSwgdik7CgkJYWRkKGwsIHIsIDIgKiB4ICsgMiwgbSwgcngsIHYpOwoJfQoKCXZvaWQgYWRkKGxsIGwsIGxsIHIsIGxsIHYpewoJCWFkZChsLCByLCAwLCAwLCBzaXplLCB2KTsKCX0KCQoJbGwgZ2V0eShsbCBpLCBsbCB4LCBsbCBseCwgbGwgcngpewoJCWlmKGx4ICsgMSA9PSByeCl7CgkJCXJldHVybiB0W3hdOwoJCX0KCQlsbCBtID0gKGx4ICsgcngpIC8gMjsKCQlpZihpIDwgbSkKCQkJcmV0dXJuIGdldHkoaSwgMiAqIHggKyAxLCBseCwgbSkgKyB0W3hdOwoJCWVsc2UKCQkJcmV0dXJuIGdldHkoaSwgMiAqIHggKyAyLCBtLCByeCkgKyB0W3hdOwoJfQoKCWxsIGdldHkobGwgaSl7CgkJcmV0dXJuIGdldHkoaSwgMCwgMCwgc2l6ZSk7Cgl9Cn07CgppbnQgbWFpbigpCnsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZSgwKTsKCWludCBuLCBxOwoJY2luID4+IG4gPj4gcTsKCXNlZ3RyZWV4IHR4OwoJc2VndHJlZXkgdHk7Cgl0eC5pbml0KG4pOwoJdHkuaW5pdCgxZTExKTsKCXdoaWxlKHEtLSl7CgkJaW50IHQ7CgkJY2luID4+IHQ7CgkJaWYodCA9PSAxKXsKCQkJaW50IGwsIHIsIGg7CgkJCWNpbiA+PiBsID4+IHIgPj4gaDsKCQkJaW50IHRvcCA9IHR4LmdldG1heChsIC0gMSwgcik7CgkJCXR4Lm1vZGlmeShsIC0gMSwgciwgdG9wICsgaCk7CgkJCXR5LmFkZCh0b3AgKyAxLCB0b3AgKyBoICsgMSwgciAtIGwgKyAxKTsKCQl9ZWxzZXsKCQkJaW50IHk7CgkJCWNpbiA+PiB5OwoJCQljb3V0IDw8IHR5LmdldHkoeSkgPDwgJ1xuJzsKCQl9Cgl9Cn0JCQoK