#include <bits/stdc++.h>
using namespace std;
long long C[20][20];
long long dp[20];
int cnt[16];
int k, t;
long long solve(int l) {
  memset(dp, 0, sizeof(dp));
  dp[0] = 1;
  for (int j = 0; j < 16; j++) {
    for (int i = l; i >= 0; i--) {
      for (int k = 1; k <= min(l - i, t - cnt[j]); k++) {
        dp[i + k] = (dp[i + k] + C[l - i][k] * dp[i]);
      }
    }
  }
  return dp[l];
}
int main() {
  C[0][0] = 1;
  for (int i = 1; i < 20; i++) {
    C[i][0] = C[i][i] = 1;
    for (int j = 1; j < i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  }
  scanf("%d%d", &k, &t);
  for (int i = 1; i < 20; i++) {
    long long ways = 0;
    for (int j = 1; j < 16; j++) {
      cnt[j]++;
      ways += solve(i - 1);
      cnt[j]--;
    }
    if (ways < k) {
      k -= ways;
    } else {
      int l = i;
      for (int i = 1; i <= l; i++) {
        if (i == 1) {
          for (int j = 1; j < 16; j++) {
            cnt[j]++;
            long long ways = solve(l - i);
            if (ways < k) {
              k -= ways;
              cnt[j]--;
            } else {
              if (j < 10)
                printf("%d", j);
              else
                printf("%c", 'a' + (j - 10));
              break;
            }
          }
        } else {
          for (int j = 0; j < 16; j++) {
            if (cnt[j] == t) continue;
            cnt[j]++;
            long long ways = solve(l - i);
            if (ways < k) {
              k -= ways;
              cnt[j]--;
            } else {
              if (j < 10)
                printf("%d", j);
              else
                printf("%c", 'a' + (j - 10));
              break;
            }
          }
        }
      }
      break;
    }
  }
}
