# coding: utf-8
# 90分かけて書いたTLE解法を供養

import heapq
# import sys

# Nは文字列のまま持つ
N = input()
K = int(input())

# K が小さいのがポイントだと思う。
# dpっぽさを感じている。
# O(N)だとあふれるので、桁数についての何を行ってO(logN)にしたい

# K = 1のとき
# 1桁について、1~9の9個
# 2桁について、10~90の9個
# 3桁について、100~900の9個

# K = 2のとき
# 1桁について、0個
# 2桁について、出てくる数字はa, b 9*8=72個
# 3桁について、出てくる数字はa, b, 0。 9 * 8 = 72個に対して、ゼロを末尾に入れるか2ケタ目に入れるかで*2。9 * 8 * 2
# 4桁について、出てくる数字はa, b, 0。 9 * 8 = 72個に対して、bを1~3桁目のどこに置くかで * 3

# K = 3のとき
# 1桁について、0個
# 2桁について、0個
# 3桁について、出てくる数字はa, b, c。 9 * 8 * 7
# 4桁について、出てくる数字はa, b, c, 0。 9 * 8 * 7 = 72*7個に対して、b,cを1~3桁目のどこに置くか 3C2
# 5桁について、出てくる数字はa, b, c, 0。 9 * 8 * 7 = 72*7個に対して、b,cを1~4桁目のどこに置くか 4C2

# ある程度までは上記の考えで進めることができるが、Nが中途半端な位置の時にどう打ち切るかが困る

# queueに突っ込んで小さい順に生成できないか?

# K = 1 のとき
# 1,2,...9,10,20,30...90, 100 ...
# なので、「取り出して、末尾に0をつけてキューに入れる」でFA

# K = 2 のとき
# 12, 13, ... 19, 21, 23, ...29, ... 98の 9*8 = 72通り
# 12と13を比較した時に、そこから生成したいのは、120, 102, 103, 130
# 102 103 というふうに交差している

# 制約の範囲で求める個数は高々117879300=10^8だし、Priority QueueでO(logN)で処理できそう
# あとは、10^100の整数をPythonが高速に扱えるかどうかの問題


# 整数に変換すると遅くなるので、文字列のままで数値としての大小を判定する
# だめだ、is_smaller()という判定方法そのものをheapqに渡すことはできない
# なので、heapqに入れる値は、(桁数, 文字列)として、まず桁数が小さいものが優先されるようにする
# def is_smaller(s1, s2):
#     if len(s1) != len(s2):
#         return len(s1) < len(s2)

#     return s1 < s2


# 初期化フェーズ
# 解き始めてから80分間、ゼロでない「異なる数字」と勘違いしてた…
# 何を使ったかを記憶しておく必要が無いならもっと簡単に解けたかもしれない…
# h = []
# if K == 1:
#     for i in range(1,10):
#         tpl = (1, str(i))
#         heapq.heappush(h, tpl)

# if K == 2:
#     for i in range(1,10):
#         for j in range(1,10):
#             if i == j:
#                 continue

#             val = i * 10 + j
#             tpl = (2, str(val))
#             heapq.heappush(h, tpl)

# if K == 3:
#     for i in range(1,10):
#         for j in range(1,10):
#             if i == j:
#                 continue

#             for k in range(1,10):
#                 if i == k or j == k:
#                     continue

#                 val = i * 100 + j * 10 + k
#                 tpl = (3, str(val))
#                 heapq.heappush(h, tpl)

h = []
if K == 1:
    for i in range(1,10):
        tpl = (1, str(i))
        heapq.heappush(h, tpl)

if K == 2:
    for i in range(1,10):
        for j in range(1,10):
            val = i * 10 + j
            tpl = (2, str(val))
            heapq.heappush(h, tpl)

if K == 3:
    for i in range(1,10):
        for j in range(1,10):
            for k in range(1,10):
                val = i * 100 + j * 10 + k
                tpl = (3, str(val))
                heapq.heappush(h, tpl)

ans = 0
max_digit = len(N)

# 同じ値が複数の挿入で生成されうるので、取り出したことがある数値の最大値を持っておいてスキップ判定に使う
max_popped = (0, '')

while len(h) > 0:
    # h[0] を 答えとして採用
    digit, a = heapq.heappop(h)
    if digit > max_digit or (digit == max_digit and a > N):
        break

    # もう見た
    if (digit, a) <= max_popped:
        continue
    max_popped = (digit, a)

    # sys.stderr.write("popped: {}\n".format(a))
    ans += 1

    # h[0]のどこかに0を挿入して新しい数を作り、queueに投入
    # 10に[0]を挿入する際に1[0]0も10[0]も100になるので、ここでuniqしておく
    new_set = set()
    for i in range(1, len(a)+1):
        new_s = "{}0{}".format(a[:i], a[i:])
        new_set.add(new_s)

    for new_val in new_set:
        tpl = (digit + 1, new_val)
        # sys.stderr.write("pushed: {}\n".format(new_val))
        heapq.heappush(h, tpl)

    # sys.stderr.write("---\n")


print(ans)
