#include<bits/stdc++.h>
using namespace std;
long long p[2000], sz, Ans, n, k;
long long q[10000];//储存生成的index数
long long fac[15];//阶乘
int size;
void dfs(int k,long long s){//预处理所有的的index数
q[++size] = s;
if(k == 11){
return;
}
dfs(k + 1, s * 10 + 4);
dfs(k + 1, s * 10 + 7);
}
void init(){//同上
dfs(1,0);
sort(q + 1, q + size + 1);
}
bool check(long long n) {//判断n是否为index数
stringstream ss;//字符串流
string s;
ss << n;
ss >> s;
bool f = 1;
for(int i = 0; i < s.size(); i++)
if(s[i]!='4' && s[i]!='7'){
f = 0; break;
}
return f;
}
int main(){
fac[0] = 1;
for(int i = 1; i <= 12; i ++) fac[i] = i * fac[i - 1];//预处理 计算阶乘
scanf("%lld%lld", &n ,&k);
k--; //注意 队内测时这挂分了QAQ
long long last = 1;
init();
for (int i = 1; i <= size; i++)
if(q[i] < max(1ll, n - 13)&& check(q[i]))Ans++;//统计 n-13位前index数
for(int i = max(1ll,n-13); i < n; i++){
long long tmp = fac[n-i];
long long l = 0, r = n-i, mid, ans = 0;
while(l <= r){//二分
int mid = (l + r) >> 1;
if(mid * tmp > k) r = mid - 1;
else ans = mid, l = mid + 1;
}
k -= ans * tmp;
last += ans;
ans ++;
for(int j = 1; j <= sz; j++)
if (p[j]<= ans)ans ++;
p[++sz] = ans;
sort(p + 1, p + 1+ sz);
if(check(i)&&check(max(0ll, n - 14)+ans)) Ans++;
}
long long ans = 1;
for (int j = 1; j <= sz; j++)
if(p[j]<=ans) ans ++;
if(check(n) && check(max(0ll, n-14)+ans))Ans ++;
if(k > 0) puts("-1");
else printf("%lld",Ans);
return 0;
}