#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
long long k, t;
int can[110];
long long C[170][11];
vector<long long> dp(170);
const long long maxx = 2e9 + 7;
long long DP(int n) {
  for (int i = 0; i <= n; i++) dp[i] = 0;
  dp[0] = 1;
  for (int i = 0; i < 16; i++) {
    for (int len = n; len >= 0; len--) {
      for (int j = 1; j <= can[i]; j++) {
        dp[len + j] += dp[len] * min(maxx, C[len + j][j]);
        dp[len + j] = min(dp[len + j], maxx);
      }
    }
  }
  return dp[n];
}
void output(int p) {
  if (p < 10)
    cout << p;
  else
    cout << char(p - 10 + 'a');
}
void dfs(int n, int p, int k) {
  output(p);
  if (!n) {
    cout << endl;
    return;
  }
  for (int i = 0; i < 16; i++) {
    if (can[i] == 0) continue;
    can[i]--;
    long long cnt = DP(n - 1);
    if (cnt >= k) {
      dfs(n - 1, i, k);
      return;
    }
    k -= cnt;
    can[i]++;
  }
}
int main() {
  ios::sync_with_stdio(false);
  long long k;
  int t;
  for (int i = 0; i < 170; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= min(i, 10); j++) {
      C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
      C[i][j] = min(C[i][j], maxx);
    }
  }
start:
  if (cin >> k >> t) {
    for (int i = 0; i < 16; i++) {
      can[i] = t;
    }
    for (int len = 1;; len++) {
      for (int i = 1; i < 16; i++) {
        can[i]--;
        long long cnt = DP(len - 1);
        if (cnt >= k) {
          dfs(len - 1, i, k);
          goto start;
        }
        k -= cnt;
        can[i]++;
      }
    }
  }
  return 0;
}
