#include <bits/stdc++.h>
using namespace std;
inline long long rd() {
  long long x = 0;
  int ch = getchar(), f = 1;
  while (!isdigit(ch) && (ch != '-') && (ch != EOF)) ch = getchar();
  if (ch == '-') {
    f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
inline void rt(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10)
    rt(x / 10), putchar(x % 10 + '0');
  else
    putchar(x + '0');
}
long long n, k;
map<long long, long long> save, now, nxt;
map<long long, long long, greater<long long>> dst;
long long calc(long long len, long long x) {
  if (!len) return 0;
  if (save.count(len)) return save[len];
  long long ret = calc((len - 1) / 2, x) + calc(len - 1 - (len - 1) / 2, x);
  if ((len - 1) / 2 == x) ret++;
  return save[len] = ret;
}
long long find(long long l, long long r, long long x, long long k) {
  if (l > r) return 0;
  long long mid = (l + r) >> 1;
  if (calc(mid - l, x) >= k)
    return find(l, mid - 1, x, k);
  else
    k -= calc(mid - l, x);
  if (mid - l == x) {
    if (k == 1)
      return mid;
    else
      k--;
  }
  return find(mid + 1, r, x, k);
}
long long work(long long n, long long k) {
  if (k == 1) return 1;
  if (k == 2) return n;
  k -= 2;
  now[n - 2] = 1;
  for (;;) {
    nxt.clear();
    for (auto x : now)
      if (x.first) {
        dst[(x.first - 1) / 2] += x.second;
        nxt[(x.first - 1) / 2] += x.second;
        nxt[x.first - 1 - (x.first - 1) / 2] += x.second;
      }
    now = nxt;
    if (now.empty()) break;
  }
  for (auto x : dst) {
    if (k <= x.second)
      return find(2, n - 1, x.first, k);
    else
      k -= x.second;
  }
}
int main() {
  n = rd(), k = rd();
  rt(work(n, k)), putchar('\n');
}
