#include <bits/stdc++.h>
using namespace std;
bool ok(long long n, long long k) {
  if (n >= 13) return true;
  long long r = 1;
  for (int i = 0; i < n; i++) r *= (i + 1);
  if (r > k) return true;
  return false;
}
long long fact(int n) {
  if (n >= 13) return 10000000007ll;
  long long ret = 1ll;
  for (int i = 0; i < n; i++) ret *= 1ll * (i + 1ll);
  return ret;
}
bool islucky(long long a) {
  while (a) {
    if (a % 10 != 4 && a % 10 != 7) return false;
    a /= 10ll;
  }
  return true;
}
long long n, k;
void oku() {
  cin >> n >> k;
  k--;
  int cnt = 0;
  if (!ok(n, k)) {
    cout << -1;
    return;
  }
  set<int> s;
  for (int len = 1; len < 10; len++)
    for (int mask = 0; mask < 1 << len; mask++) {
      long long sum = 0;
      for (int j = 0; j < len; j++)
        if ((mask & (1 << j)) > 0)
          sum = sum * 10 + 4ll;
        else
          sum = sum * 10 + 7ll;
      if (sum < n - 50 && islucky(sum)) cnt++;
    }
  int index = 0;
  for (int i = max(n - 50, 0ll); i < n; i++) s.insert(i + 1);
  for (int i = max(n - 50ll, 0ll); i < n; i++) {
    long long left = n - i - 1;
    long long fct = fact(left);
    if (fct > k) {
      if (islucky(i + 1) && islucky(*s.begin())) cnt++;
      s.erase(s.begin());
      continue;
    }
    long long a1 = k / fct;
    k -= fct * a1;
    int take;
    for (typeof((s).begin()) it = (s).begin(); it != (s).end(); it++) {
      if (a1 == 0) {
        take = *it;
        if (islucky(i + 1) && islucky(take)) cnt++;
        s.erase(it);
        break;
      }
      a1--;
    }
  }
  cout << cnt;
}
int main() {
  oku();
  return 0;
}
