#include <bits/stdc++.h>
using namespace std;
vector<int> lucky_nums;
vector<int> datos;
vector<long long> factorial;
set<long long> numeros;
int idx_cambio;
void obten_lucky(int n) {
  numeros.insert(0);
  for (int i = 0; i < 10; ++i) {
    set<long long> temp = numeros;
    for (const auto& act : temp) {
      long long nuevo;
      nuevo = act * 10 + 7;
      if (nuevo <= n) numeros.insert(nuevo);
      nuevo = act * 10 + 4;
      if (nuevo <= n) numeros.insert(nuevo);
    }
  }
  numeros.erase(0);
  for (const auto& act : numeros) {
    lucky_nums.push_back(act);
  }
}
int toma(vector<int>& disponibles, int idx) {
  int resp = disponibles[idx];
  for (int i = idx; i < disponibles.size() - 1; ++i) {
    disponibles[i] = disponibles[i + 1];
  }
  disponibles.pop_back();
  return resp;
}
void init(int n, int k) {
  factorial.push_back(1);
  for (int i = 0; i < 14; ++i) {
    factorial.push_back(factorial[i] * (i + 1LL));
  }
  if (n <= 13) {
    if (factorial[n] < k) {
      cout << "-1\n";
      exit(0);
    }
  }
  obten_lucky(n);
  long long acc = 1;
  idx_cambio = 0;
  do {
    idx_cambio++;
    acc = acc * (long long)idx_cambio;
  } while (acc < k);
  datos.resize(idx_cambio);
  int restantes = idx_cambio - 1;
  vector<int> disponibles(idx_cambio);
  for (int i = 0; i < idx_cambio; ++i) {
    disponibles[i] = i;
  }
  for (int i = 0; i < idx_cambio; ++i) {
    int num_act = (k + factorial[restantes] - 1) / factorial[restantes];
    datos[i] = num_act;
    k -= (num_act - 1) * factorial[restantes];
    datos[i] = toma(disponibles, num_act - 1);
    restantes--;
  }
  int temp = idx_cambio;
  idx_cambio = n - idx_cambio + 1;
  for (int i = 0; i < temp; ++i) {
    datos[i] += idx_cambio;
  }
}
int obten_val(int n, int k, int idx) {
  if (idx < idx_cambio) {
    return idx;
  }
  return datos[idx - idx_cambio];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, k;
  cin >> n >> k;
  init(n, k);
  int resp = 0;
  for (const auto& idx : lucky_nums) {
    resp += (numeros.find(obten_val(n, k, idx)) != numeros.end());
  }
  cout << resp << '\n';
  return 0;
}
