#include <bits/stdc++.h>
using namespace std;
int N, K;
vector<int> lucky;
void gen(long long N, long long v) {
  if (v > N) {
    return;
  }
  if (v != 0) {
    lucky.push_back((int)v);
  }
  gen(N, 10 * v + 4);
  gen(N, 10 * v + 7);
}
vector<int> fact;
vector<int> a;
set<int> s;
void gen2(int K, int index) {
  if (index < 0) return;
  int v = K / fact[index];
  set<int>::iterator it = s.begin();
  advance(it, v);
  a.push_back(*it);
  s.erase(it);
  gen2(K - v * fact[index], index - 1);
}
int main() {
  scanf("%d%d", &N, &K);
  K--;
  fact.push_back(1);
  for (int i = 1;; i++) {
    long long v = (long long)fact.back() * i;
    if (v > (long long)K) {
      break;
    }
    fact.push_back((int)v);
  }
  for (int i = 0; i < (int)((fact).size()); i++) {
    s.insert(i);
  }
  gen2(K, (int)((fact).size()) - 1);
  if (N < (int)((a).size())) {
    puts("-1");
    return 0;
  }
  for (int i = 0; i < (int)((a).size()); i++) {
    a[i] += (1 + N - (int)((a).size()));
  }
  gen(N, 0);
  sort(lucky.begin(), lucky.end());
  int cnt = 0;
  for (int i = 0; i < (int)((lucky).size()); i++) {
    int index = lucky[i];
    if (index > N - (int)((a).size())) {
      index = a[index - (N - (int)((a).size())) - 1];
    }
    if (binary_search(lucky.begin(), lucky.end(), index)) {
      cnt++;
    }
  }
  printf("%d\n", cnt);
  return 0;
}
