#include <bits/stdc++.h>
using namespace std;
const int maxn = 200;
long long mm[maxn][maxn], dp[16][maxn];
int num[16], t;
long long k;
long long solve(int len) {
  memset(dp, 0, sizeof(dp));
  for (int i = 0; i <= num[0]; i++) dp[0][i] = mm[len][i];
  for (int i = 1; i < 16; i++)
    for (int l = 0; l <= len; l++)
      for (int j = 0; j <= min(num[i], l); j++)
        dp[i][l] += dp[i - 1][l - j] * mm[len - l + j][j];
  return dp[15][len];
}
void print(int j) {
  if (j < 10)
    cout << j;
  else
    cout << (char)(j + 'a' - 10);
}
void f(int len) {
  for (int i = len; i > 0; i--) {
    if (i == 1) {
      for (int j = 0; j < 16; j++) {
        if (j == 0 && len == 1) continue;
        if (num[j] != 0) k--;
        if (k == 0) {
          print(j);
          break;
        }
      }
      break;
    }
    for (int j = 0; j < 16; j++) {
      if (i == len && j == 0) continue;
      num[j]--;
      long long tmp = solve(i - 1);
      if (k > tmp)
        k -= tmp;
      else {
        print(j);
        break;
      }
      num[j]++;
    }
  }
}
int main() {
  for (int i = 0; i < maxn; i++) mm[i][0] = 1;
  for (int i = 1; i < maxn; i++)
    for (int j = 1; j <= i; j++) mm[i][j] = mm[i - 1][j] + mm[i - 1][j - 1];
  cin >> k >> t;
  for (int i = 0; i < 16; i++) num[i] = t;
  int len = 1;
  for (;; len++) {
    long long tmp = 0;
    if (len == 1)
      tmp = 15;
    else
      for (int j = 1; j < 16; j++) {
        num[j]--;
        tmp += solve(len - 1);
        num[j]++;
      }
    if (k > tmp)
      k -= tmp;
    else
      break;
  }
  f(len);
  return 0;
}
