#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  int f = 1;
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = x * 10 + c - '0';
    c = getchar();
  }
  x *= f;
}
template <class T>
inline void umin(T &x, T y) {
  x = x < y ? x : y;
}
template <class T>
inline void umax(T &x, T y) {
  x = x > y ? x : y;
}
inline unsigned int R() {
  static unsigned int seed = 416;
  return seed ^= seed >> 5, seed ^= seed << 17, seed ^= seed >> 13;
}
long long n, k;
map<long long, long long> Map;
long long tar, need;
inline long long getcnt(long long n, long long tar) {
  long long res = 0, val = n, x = 0, y = 1;
  while (val) {
    res += (val > 1 && (val - 2) / 2 == tar ? x : 0) +
           ((val - 1) / 2 == tar ? y : 0);
    if (val == 1) break;
    long long a = 0, b = 0;
    if (val / 2 == val / 2)
      b += y;
    else
      a += y;
    if ((val - 1) / 2 == val / 2)
      b += y + x;
    else
      a += y + x;
    if ((val - 2) / 2 == val / 2)
      b += x;
    else
      a += x;
    val /= 2;
    x = a;
    y = b;
  }
  return res;
}
long long getans(long long n, long long tar, long long need) {
  if (n == 1) return n;
  if ((n - 1) / 2 == tar) need--;
  if (!need) return (n + 1) / 2;
  long long zuo = getcnt((n - 1) / 2, tar);
  if (zuo >= need) return getans((n - 1) / 2, tar, need);
  return getans(n / 2, tar, need - zuo) + (n - 1) / 2 + 1;
}
int main() {
  read(n);
  read(k);
  if (k == 1) {
    printf("1\n");
    return 0;
  }
  if (k == 2) {
    printf("%lld\n", n);
    return 0;
  }
  Map[n - 2]++;
  long long lst = k - 2;
  while (Map.size()) {
    long long x = (*Map.rbegin()).first, cnt = (*Map.rbegin()).second;
    if (!cnt) {
      Map.erase(--Map.end());
      continue;
    }
    long long cur = (*Map.rbegin()).second + (x % 2 == 0 ? Map[x - 1] : 0) +
                    (x == 2 ? cnt : 0);
    Map[x / 2] += cnt;
    Map[(x - 1) / 2] += cnt;
    if (cur < lst) {
      lst -= cnt;
      Map.erase(--Map.end());
    } else {
      tar = (x - 1) / 2;
      need = lst;
      break;
    }
  }
  printf("%lld\n", getans(n - 2, tar, need) + 1);
  return 0;
}
