""" calc(D,S) D桁以下の整数であって、桁の和がSであるものの個数 (1+x+x^2+..+x^9)^D/(1-x) の x^S の係数 =[x^S](1-x^10)^D/(1-x)^(D+1) =sum[k=0..D] [x^(S-10*k)] C(D,k)*(-1)^k/(1-x)^(D+1) =sum[k=0..D] C(D,k)*(-1)^k*C(S-10*k+D,S-10*k) O(min(D,S)^2/10) """ def calc(D:int,S:int)->int: res=0 c1=1 for i in range(D+1): if 10*i>S:break s=S-10*i c2=1 for j in range(s): c2*=(s+D-j) c2//=(j+1) res+=(-1 if i%2 else 1)*c1*c2 c1*=(D-i) c1//=(i+1) return res """ slv(S,K) 桁和がSであるような非負整数のうちK番目に大きいもの 桁を二分探索して決め打ちをしてあとは上の桁から決めていく """ def slv(S:int,K:int)->str: L=0 R=100000 while R-L>1: mid=(L+R)//2 if calc(mid,S)>=K:R=mid else:L=mid lim=R ans=[] for i in range(lim-1,-1,-1): for j in range(10): res=calc(i,S-j) if K<=res: if len(ans) or j:ans.append(str(j)) S-=j break K-=res return "".join(ans) S,K=map(int,input().split()) """ K<=10^18 より、桁和は大きくても9*18までにしかならない """ S=min(S,9*18) K+=1 res=slv(S,K) print("".join(res))