#include <bits/stdc++.h>
using namespace std;
const int LEN = 15, NUM = 16;
int num[NUM], k, t, len, ans;
long long c[LEN][LEN], f[NUM][LEN];
void prework() {
  for (int i = 0; i < LEN; i++) c[i][0] = 1;
  for (int i = 1; i < LEN; i++)
    for (int j = 1; j <= i; j++) c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
}
long long check(int len) {
  if (len == 0) return 1;
  memset(f, 0, sizeof(f));
  for (int i = 0; i <= len && i <= num[0]; i++) f[0][i] = c[len][i];
  for (int i = 1; i < NUM; i++)
    for (int l = 0; l <= len; l++)
      for (int j = 0; j <= num[i] && j <= l; j++)
        f[i][l] += f[i - 1][l - j] * c[len - l + j][j];
  return f[NUM - 1][len];
}
long long che0(int len) {
  check(len);
  return f[NUM - 1][len] - 1;
}
int main() {
  prework();
  scanf("%d%d", &k, &t);
  for (int i = 0; i < NUM; i++) num[i] = t;
  for (len = 1;; len++) {
    long long x = 0;
    for (int j = 1; j < NUM; j++) {
      num[j]--;
      x += check(len - 1);
      num[j]++;
    }
    if (k > x)
      k -= x;
    else
      break;
  }
  int ans;
  long long x = 0;
  for (int i = len; i >= 1; i--) {
    for (int j = 0; j < NUM; j++)
      if (num[j]) {
        if (i == len && j == 0) continue;
        num[j]--;
        x = check(i - 1);
        if (k > x)
          k -= x;
        else {
          ans = j;
          break;
        }
        num[j]++;
      }
    printf("%c", ans < 10 ? ans + '0' : ans - 10 + 'a');
  }
}
