#include <bits/stdc++.h>
using namespace std;
priority_queue<long long> a;
map<long long, long long> s;
long long calc(long long n, long long x) {
  while (!a.empty()) a.pop();
  s.clear();
  a.push(n);
  s[n]++;
  long long ans = 0;
  while (1) {
    long long y = a.top();
    if (x == y || x == (y ^ 1)) ans += s[y];
    if (y <= x && y <= (x ^ 1)) return ans;
    a.pop();
    if (!s[y / 2]) a.push(y / 2);
    s[y / 2] += s[y];
    if (!s[(y + 1) / 2]) a.push((y + 1) / 2);
    s[(y + 1) / 2] += s[y];
  }
}
long long solve(long long n, long long x, long long k) {
  long long ans = 0;
  while (1) {
    long long s = calc(n / 2, x);
    if (n == x || (n == (x ^ 1))) {
      k--;
      if (!k) return ans + n / 2;
    }
    if (k <= s) {
      n /= 2;
      continue;
    }
    k -= s;
    ans += n / 2;
    n = (n + 1) / 2;
  }
}
int main() {
  long long n, k;
  scanf("%I64d%I64d", &n, &k);
  if (k == 1) {
    puts("1");
    return 0;
  }
  if (k == 2) {
    printf("%I64d\n", n);
    return 0;
  }
  n -= 1;
  k -= 2;
  a.push(n);
  s[n] = 1;
  long long x;
  while (1) {
    long long y = a.top();
    if (k <= s[y]) {
      if (y % 2 == 0) k += s[y ^ 1];
      x = y;
      break;
    }
    k -= s[y];
    a.pop();
    if (!s[y / 2]) a.push(y / 2);
    s[y / 2] += s[y];
    if (!s[(y + 1) / 2]) a.push((y + 1) / 2);
    s[(y + 1) / 2] += s[y];
  }
  printf("%I64d\n", solve(n, x, k) + 1);
  return 0;
}
