#include <bits/stdc++.h>
using namespace std;
template <typename T>
void dprint(T begin, T end) {
  for (auto i = begin; i != end; i++) {
    cerr << (*i) << " ";
  }
  cerr << "\n";
}
map<long long, long long> mm;
pair<long long, long long> get(long long n, long long k) {
  mm.clear();
  mm[n] += 1;
  while (true) {
    auto it = mm.rbegin();
    long long x = it->first;
    long long c = it->second;
    if (x % 2 == 1) {
      if (c < k) {
        if (c != 0) {
          k -= c;
          long long l = (x - 1) / 2;
          long long r = x / 2;
          mm[l] += c;
          mm[r] += c;
        }
        mm.erase(x);
      } else {
        return make_pair(x, k);
      }
    } else {
      long long c2 = mm[x - 1];
      if (c + c2 < k) {
        if (x == 2) return make_pair(1, k);
        k -= c + c2;
        mm.erase(x);
        mm.erase(x - 1);
        long long l, r;
        if (c != 0) {
          l = (x - 1) / 2;
          r = x / 2;
          mm[l] += c;
          mm[r] += c;
        }
        if (c2 != 0) {
          l = (x - 2) / 2;
          r = (x - 1) / 2;
          mm[l] += c2;
          mm[r] += c2;
        }
      } else {
        return make_pair(x - 1, k);
      }
    }
  }
  assert(false);
  return make_pair(0, 0);
}
long long n, k;
long long get2(long long n, long long k) {
  mm.clear();
  mm[n] += 1;
  while (true) {
    auto it = mm.rbegin();
    long long x = it->first;
    long long c = it->second;
    if (x == k) return c;
    if (x == k + 1) {
      return c + mm[x - 1];
    }
    if (x < k) return 0;
    long long l = (x - 1) / 2;
    long long r = x / 2;
    mm[l] += c;
    mm[r] += c;
    mm.erase(x);
  }
  return 0;
}
long long get3(long long n, long long k) {
  if (n == 0) return 0;
  mm.clear();
  mm[n] += 1;
  while (true) {
    auto it = mm.rbegin();
    long long x = it->first;
    long long c = it->second;
    if (x == k) return c;
    if (x < k) return 0;
    long long l = (x - 1) / 2;
    long long r = x / 2;
    mm[l] += c;
    mm[r] += c;
    mm.erase(x);
  }
  return 0;
}
int main() {
  cin >> n >> k;
  if (k == 1) {
    cout << 1 << "\n";
    return 0;
  }
  if (k == 2) {
    cout << n << "\n";
    return 0;
  }
  n -= 2;
  k -= 2;
  pair<long long, long long> l = get(n, k);
  if (l.first == 1) {
    long long cur = n;
    long long lb = 2;
    long long rb = n + 1;
    while (cur != 1 && cur != 2) {
      long long nl = (cur - 1) / 2;
      long long c1 = get3(nl, 1);
      long long c2 = get3(nl, 2);
      if (c1 + c2 < l.second) {
        l.second -= c1 + c2;
        lb = (lb + rb) / 2 + 1;
        cur = cur / 2;
      } else {
        rb = (lb + rb) / 2 - 1;
        cur = nl;
      }
    }
    if (cur == 1) {
      cout << lb << "\n";
    } else {
      if (l.second == 1)
        cout << lb << "\n";
      else
        cout << lb + 1 << "\n";
    }
  } else {
    long long cur = n;
    long long lb = 2;
    long long rb = n + 1;
    while (cur != l.first && cur != l.first + 1) {
      long long nl = (cur - 1) / 2;
      long long c = get2(nl, l.first);
      if (c < l.second) {
        l.second -= c;
        lb = (lb + rb) / 2 + 1;
        cur = cur / 2;
      } else {
        rb = (lb + rb) / 2 - 1;
        cur = nl;
      }
    }
    cout << (lb + rb) / 2 << "\n";
  }
  return 0;
}
