#include <bits/stdc++.h>
using namespace std;
template <class T>
T _abs(T n) {
  return (n < 0 ? -n : n);
}
template <class T>
T _max(T a, T b) {
  return (!(a < b) ? a : b);
}
template <class T>
T _min(T a, T b) {
  return (a < b ? a : b);
}
template <class T>
T sq(T x) {
  return x * x;
}
const double EPS = 1e-9;
const int INF = 0x7f7f7f7f;
bool isL(int d) {
  while (d) {
    if (d % 10 != 4 && d % 10 != 7) return false;
    d /= 10;
  }
  return true;
}
long long fc[16];
int pr[100100];
void kFact(int k, int p, set<int> &d) {
  if (p < 0) return;
  for (auto a : d) {
    if (fc[p] <= k)
      k -= fc[p];
    else {
      pr[p] = a;
      d.erase(a);
      return kFact(k, p - 1, d);
    }
  }
}
int main() {
  set<int> d;
  int i, j, n, k;
  cin >> n >> k;
  fc[0] = 1;
  for (i = 1; i <= 13; i++) fc[i] = i * fc[i - 1];
  if (n <= 13 && k > fc[n]) {
    puts("-1");
    return 0;
  }
  for (i = n, j = 13; i && j; i--, j--) {
    d.insert(i);
  }
  int st = i, l = d.size();
  ;
  kFact(k - 1, l - 1, d);
  int r = 0;
  for (i = 1; i <= l; i++)
    if (isL(st + i) && isL(pr[l - i])) r++;
  vector<int> v;
  if (st >= 4) v.push_back(4);
  if (st >= 7) v.push_back(7);
  long long t;
  for (i = 0; i < v.size(); i++) {
    t = v[i];
    t *= 10;
    if (t + 4 <= st) v.push_back(t + 4);
    if (t + 7 <= st) v.push_back(t + 7);
  }
  r += v.size();
  cout << r << '\n';
  return 0;
}
