#include <bits/stdc++.h>
using namespace std;
const int c_YET = -1;
const int INF = 1e9 + 1;
const long long LLINF = 1e17 + 1;
const int DX[9] = {0, 0, 1, -1, 1, 1, -1, -1, 0};
const int DY[9] = {1, -1, 0, 0, 1, -1, 1, -1, 0};
const long long MOD = 1e9 + 7;
const long long MAX = 1e9;
const double PI = 3.14159265358979323846264338327950288;
int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);
  cout << fixed << setprecision(30);
  string n;
  long long K;
  cin >> n >> K;
  vector<long long> N;
  for (int i = 0; i < n.length(); i++) {
    N.emplace_back(long long(n[i]) - long long('0'));
  }
  long long ans = 0;
  if (K == 1) {
    ans += 9 * (N.size() - 1);
    ans += N[0];
  } else if (K == 2) {
    if (N.size() < 2) {
      cout << 0;
      return 0;
    }
    long long s = N.size() - 1;
    ans += ((s * (s - 1)) / 2) * 81;
    ans += (N[0] - 1) * s * 9;
    long long first = LLINF;
    for (int i = 1; i < N.size(); i++) {
      if (N[i] != 0) {
        first = i;
        break;
      }
    }
    if (first != LLINF) {
      ans += N[first];
      for (int i = first + 1; i < N.size(); i++) {
        ans += 9;
      }
    }
  } else if (K == 3) {
    if (N.size() < 3) {
      cout << 0;
      return 0;
    }
    long long s = N.size() - 1;
    ans += ((s * (s - 1) * (s - 2)) / 6) * 9 * 9 * 9;
    long long first = LLINF;
    for (int i = 2; i < N.size(); i++) {
      if (N[i] != 0) {
        first = i;
        break;
      }
    }
    if (first != LLINF) {
      ans += N[first];
      for (int i = first + 1; i < N.size(); i++) {
        ans += 9;
      }
    }
    first = LLINF;
    for (int i = 1; i < N.size(); i++) {
      if (N[i] != 0) {
        first = i;
        break;
      }
    }
    if (first != LLINF) {
      ans += (N[first] - 1) * (N.size() - first - 1) * 9;
    }
    long long len = N.size() - first - 1;
    ans += ((len * len - len) / 2) * 9 * 9;
    len++;
    ans += ((len * len - len) / 2) * 9 * 9 * (N[0] - 1);
  }
  cout << ans;
}
