#include <bits/stdc++.h>
using namespace std;
using Graph = vector<vector<int>>;
int main() {
  string N;
  long long K;
  cin >> N >> K;
  long long ans = 0;
  if (N.size() < K) {
    cout << 0 << endl;
    return 0;
  }
  if (K == 1) {
    ans += N[0] - '0';
    ans += 9 * (N.size() - 1);
  }
  if (K == 2) {
    int headmax = (N[0] - '0') * 10 + (N[1] - '0');
    for (int i = 11; i < headmax + 1; i++) {
      if (i % 10 != 0) ans++;
    }
    if (N[1] != '0') {
      if (N.size() > 2) {
        ans += (N[0] - '0') * (N.size() - 2) * 9;
      }
    } else {
      for (int i = 10; i < headmax + 1; i += 10) {
        if (N[0] - '0' != i / 10) {
          ans += (N.size() - 2) * 9;
        } else {
          bool ok = false;
          for (int j = 2; j < N.size(); j++) {
            if (!ok) {
              ans += N[j] - '0';
              if (N[j] != '0') ok = true;
            } else {
              ans += 9;
            }
          }
        }
      }
    }
    if (N.size() > 3) {
      ans += (N.size() - 1) * (N.size() - 2) / 2 * 9 * 9;
    }
  }
  if (K == 3) {
    int headmax = (N[0] - '0') * 100 + (N[1] - '0') * 10 + (N[2] - '0');
    for (int i = 111; i < headmax + 1; i++) {
      if (i % 10 != 0 && (i / 10) % 10 != 0) ans++;
    }
    headmax = (N[0] - '0') * 10 + (N[1] - '0');
    for (int i = 11; i < headmax + 1; i++) {
      if (i % 10 != 0) {
        if (N[2] == '0' && i == headmax) {
          bool ok = false;
          for (int j = 3; j < N.size(); j++) {
            if (!ok) {
              ans += N[j] - '0';
              if (N[j] != '0') ok = true;
            } else {
              ans += 9;
            }
          }
        } else {
          ans += (N.size() - 3) * 9;
        }
      }
    }
    if (N[1] != '0') {
      headmax = (N[0] - '0') * 100 + (N[1] - '0') * 10 + (N[2] - '0');
      for (int i = 101; i < headmax + 1; i++) {
        if ((i / 10) % 10 != 0) continue;
        if (i % 10 != 0) ans += (N.size() - 3) * 9;
      }
    } else {
      headmax = (N[0] - '0') * 100 + (N[1] - '0') * 10 + (N[2] - '0');
      for (int i = 101; i < headmax + 1; i++) {
        if ((i / 10) % 10 != 0 || i % 10 == 0) continue;
        if (headmax == i) {
          bool ok = false;
          for (int j = 3; j < N.size(); j++) {
            if (!ok) {
              ans += N[j] - '0';
              if (N[j] != '0') ok = true;
            } else {
              ans += 9;
            }
          }
        } else {
          ans += (N.size() - 3) * 9;
        }
      }
    }
    if (N.size() > 4) {
      if (N[1] != '0' || N[2] != '0')
        ans += (N[0] - '0') * (N.size() - 3) * (N.size() - 4) / 2 * 9 * 9;
      else {
        headmax = (N[0] - '0');
        for (int i = 1; i < headmax + 1; i++) {
          if (i == headmax) {
            int cnt = 0;
            for (int j = 3; j < N.size(); j++) {
              if (N[j] != '0' && cnt == 0) {
                ans += (N[j] - '0' - 1) * (N.size() - j - 1) * 9;
                cnt++;
              } else if (N[j] != '0' && cnt == 1) {
                ans += (N[j] - '0');
                cnt++;
              }
            }
          } else {
            ans += 9;
          }
        }
      }
    }
    ans += (N.size() - 1) * (N.size() - 2) * (N.size() - 3) / 6 * 9 * 9 * 9;
  }
  cout << ans << endl;
  return 0;
}
