#include using namespace std; using ll = long long; const ll INF = (1LL<<60); struct Fenwick { int n; vector t; Fenwick(int _n): n(_n), t(n+1, INF) {} // i∈[1..n] の点更新: t[i] = min(t[i], v) void update(int i, ll v) { for(; i<=n; i+=i&-i) t[i] = min(t[i], v); } // 1..i の最小値を返す ll query(int i) { ll r = INF; for(; i>0; i-=i&-i) r = min(r, t[i]); return r; } }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N, Q; cin >> N >> Q; Fenwick bit1(N), bit2(N); while(Q--){ int type; cin >> type; if(type == 1){ int x; cin >> x; ll ans = x - 1; // 直接歩くコスト ll bmin = bit1.query(x); if(bmin < INF) ans = min(ans, (ll)x + bmin); // 逆向きはインデックスを反転して同じクエリ int rx = N - x + 1; ll dmin = bit2.query(rx); if(dmin < INF) ans = min(ans, - (ll)x + dmin); cout << ans << "\n"; } else { int x; ll c; cin >> x >> c; // x→反転インデックス int rx = N - x + 1; bit1.update(x, c - x); bit2.update(rx, c + x); } } return 0; }