func_code_string: #include <bits/stdc++.h>   using namespace std;   map<long long, map<long long, long long, greater<long long>>> comp;   map<long long, long long, greater<long long>> Add(long long x) {     if (x == 0) return {};     if (comp.count(x)) return comp[x];     long long choose = (x - 1) / 2;     long long diff = min(choose + 1, x - choose);     map<long long, long long, greater<long long>> ret = {{diff, 1}};     for (long long xp : {choose, x - choose - 1})       for (auto p : Add(xp)) ret[p.first] += p.second;     return comp[x] = ret;   }   long long Solve(long long x, long long seek, long long& cnt) {     long long choose = (x - 1) / 2;     long long diff = min(choose + 1, x - choose);     if (diff == seek) {       return choose + cnt;     }     long long ret = 0;     for (long long xp : {choose, x - choose - 1}) {       long long now = Add(xp)[seek];       if (now > cnt) {         return ret + Solve(xp, seek, cnt);       }       cnt -= now;       ret += choose + 1;     }     assert(false);   }   int32_t main() {     long long n, k;     cin >> n >> k;     if (k == 1) {       cout << 1 << endl;       return 0;     }     if (k == 2) {       cout << n << endl;       return 0;     }     n -= 2;     k -= 3;     for (auto p : Add(n)) {       if (p.second > k) {         cout << 2 + Solve(n, p.first, k) << endl;         return 0;       }       k -= p.second;     }     assert(false);     return 0;   }   