#include <bits/stdc++.h>
using namespace std;
int n, cnt[20], dp[20][200 + 10], C[200 + 10][200 + 10], k, t;
void prepare() {
  C[0][0] = 1;
  for (int i = 1; i <= 200; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  }
}
inline long long DP(int len) {
  memset(dp, 0, sizeof dp);
  for (int j = 0; j <= min(len, cnt[0]); j++) dp[0][j] = C[len][j];
  for (int i = 1; i < 16; i++)
    for (int j = 0; j <= len; j++)
      for (int l = 0; l <= min(j, cnt[i]); l++)
        dp[i][j] += dp[i - 1][j - l] * C[len - (j - l)][l];
  return dp[15][len];
}
inline void print(int x) {
  if (x < 10)
    printf("%d", x);
  else
    printf("%c", x - 10 + 'a');
}
int main() {
  scanf("%d%d", &k, &t);
  prepare();
  for (int i = 0; i < 16; i++) cnt[i] = t;
  int len = 1;
  while (true) {
    long long tmp = 0;
    if (len == 1) {
      tmp = 15;
    } else {
      for (int i = 1; i < 16; i++) {
        cnt[i]--;
        tmp += DP(len - 1);
        cnt[i]++;
      }
    }
    if (k > tmp)
      k -= tmp;
    else
      break;
    len++;
  }
  for (int i = len; i >= 1; i--) {
    if (i == 1) {
      for (int j = 0; j < 16; j++) {
        if (j == 0 && len == 1) continue;
        if (cnt[j]) k--;
        if (!k) {
          print(j);
          break;
        }
      }
    } else {
      for (int j = 0; j < 16; j++) {
        if (i == len && j == 0) continue;
        cnt[j]--;
        long long tmp = DP(i - 1);
        if (k > tmp) {
          k -= tmp;
          cnt[j]++;
        } else {
          print(j);
          break;
        }
      }
    }
  }
  return 0;
}
