#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e10;
int t;
long long k, f[20][20], c[20][20];
int cnt[17];
int enter() {
  cin >> k >> t;
  return 0;
}
int init() {
  c[0][0] = 1;
  for (int i = 1; i <= 20; i++) {
    c[i][0] = 1;
    for (int j = 1; j <= i; j++)
      c[i][j] = min(inf, c[i - 1][j - 1] + c[i - 1][j]);
  }
  for (int i = 1; i <= 17; i++) cnt[i] = t;
  return 0;
}
long long dp(int len) {
  memset(f, 0, sizeof(f));
  if (len == 0) return 1;
  f[0][0] = 1;
  for (int digit = 0; digit < 16; digit++)
    for (int l = 0; l <= len; l++)
      if (f[l][digit] > 0) {
        for (int s = 0; (s <= cnt[digit + 1]) && (s + l <= len); s++)
          f[l + s][digit + 1] += f[l][digit] * c[l + s][l];
      }
  return f[len][16];
}
char getchar(int x) {
  if (x < 10) return char('0' + x);
  return char('a' + x - 10);
}
int pro() {
  string ans = "";
  init();
  int len = 1;
  long long temp = 0;
  for (len = 1;; len++) {
    for (int i = 2; i <= 16; i++) {
      cnt[i]--;
      temp = dp(len - 1);
      if (temp < k) {
        k -= temp;
        cnt[i]++;
      } else {
        ans += getchar(i - 1);
        while (--len) {
          for (int i = 1; i <= 16; i++)
            if (cnt[i] > 0) {
              cnt[i]--;
              long long tmp = dp(len - 1);
              if (tmp < k) {
                k -= tmp;
                cnt[i]++;
              } else {
                ans += getchar(i - 1);
                break;
              }
            }
        }
        cout << ans;
        return 0;
      }
    }
  }
  cout << ans;
  return 0;
}
int main() {
  enter();
  pro();
  return 0;
}
