#include using namespace std; //#include //using namespace atcoder; using ll = long long int; using ull = unsigned long long int; using ld = long double; constexpr ll MAX = 2000000000000000000; constexpr ld PI = 3.14159265358979; constexpr ll MOD = 0;//2024948111; ld dotorad(ld K){ return PI * K / 180.0; } ld radtodo(ld K){ return K * 180.0 / PI; } mt19937 mt; void randinit(){ srand((unsigned)time(NULL));mt = mt19937(rand()); } struct Segtree{ ll n; const ll base = MAX; ll op(ll a,ll b){ return min(a,b); } ll co(ll a,ll b){ return min(a,b); } vector A; Segtree(ll N): A(N << 1,base) { n = N; } void update(ll i,ll a){ i += n; A[i] = op(A[i],a); while(i >> 1 > 0){ i >>= 1; A[i] = co(A[i << 1],A[i << 1 | 1]); } } ll query(ll l,ll r){ ll L = base,R = base; l += n; r += n; while(l < r){ if(l & 1){ L = co(L,A[l]); l++; } if(r & 1){ r--; R = co(A[r],R); } l >>= 1; r >>= 1; } return co(L,R); } }; int main(){ ll N,Q; cin >> N >> Q; Segtree S1(N),S2(N); S1.update(0,0); S2.update(0,0); for(ll q = 0;q < Q;q++){ ll t; cin >> t; if(t == 1){ ll x; cin >> x; x--; cout << min(S1.query(0,x + 1) + x,S2.query(x,N) - x) << endl; } else{ ll x,c; cin >> x >> c; x--; S1.update(x,c - x); S2.update(x,c + x); } } }