#include <bits/stdc++.h>
using namespace std;
void ga(int N, int *A) {
  for (int i(0); i < N; i++) scanf("%d", A + i);
}
long long f[(20) + 1] = {1};
int C[26], X;
char s[666], r[666];
void nth(long long K, char *o, char *s) {
  if (!X++)
    for (int k(1); k < (20) + 1; k++) f[k] = f[k - 1] * k;
  long long L(strlen(s)), X(f[L]), T, l(0);
  (memset(C, o[L] = 0, sizeof(C)));
  for (int i(0); i < L; i++) ++C[s[i] - 97];
  for (int i(0); i < 26; i++) X /= f[C[i]];
  if (K > X) {
    *o = 0;
    return;
  };
  for (int i(0); i < L; i++)
    for (int j(0); j < 26; j++)
      if (C[j]) {
        --C[j];
        T = f[L - i - 1];
        for (int i(0); i < 26; i++) T /= f[C[i]];
        if (K <= T) {
          o[l++] = 'a' + j;
          break;
        }
        ++C[j], K -= T;
      }
}
long long fc(int a) { return a ? fc(a - 1) * a : 1; }
int N, K, T;
void rc(int r, long long S) {
  if (S > N - (20)) return;
  if (!r) {
    ++T;
    return;
  }
  rc(r - 1, S * 10 + 4), rc(r - 1, S * 10 + 7);
}
bool LC(int N) {
  while (N) {
    if (N % 10 != 7 && N % 10 != 4) return 0;
    N /= 10;
  }
  return 1;
}
int main(void) {
  scanf("%d%d", &N, &K);
  if (N <= (20) && fc(N) < K) return puts("-1");
  if (N < (20)) {
    for (int i(0); i < N; i++) s[i] = r[i] = 97 + i;
    nth(K, s, r);
    for (int i(0); i < N; i++) T += LC(s[i] - 96) && LC(i + 1);
    printf("%d\n", T);
    return 0;
  }
  for (int i(0); i < 10; i++) rc(i + 1, 0);
  for (int i(0); i < (20); i++) s[i] = r[i] = 97 + i;
  nth(K, s, r);
  for (int i(0); i < (20); i++)
    T += LC(s[i] - 96 + N - (20)) && LC(N - (20) + i + 1);
  printf("%d\n", T);
  return 0;
}
