#include <bits/stdc++.h>
using namespace std;
long long c[200][200], k, dp[200][20], n;
int status[20], ans[200];
int tim;
long long calc(int len) {
  memset(dp, 0, sizeof(dp));
  for (int i = 0; i <= min(len, status[0]); i++) dp[i][0] = 1;
  for (int i = 0; i <= len; i++) {
    for (int j = 1; j < 16; j++) {
      for (int k = 0; k <= min(i, status[j]); k++) {
        dp[i][j] += dp[i - k][j - 1] * c[i][k];
      }
    }
  }
  return dp[len][15];
}
int main() {
  long long tmpk;
  scanf("%I64d%d", &k, &tim);
  n = tim * 16;
  for (int i = 0; i <= n; i++) {
    c[i][0] = 1;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
    }
  }
  int len;
  tmpk = k;
  for (int i = 0; i < 16; i++) status[i] = tim;
  status[1]--;
  calc(n - 1);
  status[1]++;
  for (int i = 1; i <= n; i++) {
    long long res = 15LL * dp[i - 1][15];
    if (res >= tmpk) {
      len = i;
      break;
    } else
      tmpk -= res;
  }
  k = tmpk;
  for (int i = 1; i <= len; i++) {
    long long res = 0;
    for (int j = 1 - (i != 1); j < 16; j++) {
      if (status[j]) {
        status[j]--;
        long long tmp = calc(len - i);
        if (res + tmp < k) {
          res += tmp;
        } else {
          ans[i] = j;
          break;
        }
        status[j]++;
      }
    }
    k -= res;
  }
  for (int i = 1; i <= len; i++) {
    if (ans[i] < 10)
      printf("%d", ans[i]);
    else
      printf("%c", 'a' + ans[i] - 10);
  }
  return 0;
}
