Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal representation contains only the lucky digits 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not.

One day Petya dreamt of a lexicographically k-th permutation of integers from 1 to n. Determine how many lucky numbers in the permutation are located on the positions whose indexes are also lucky numbers.

Input

The first line contains two integers n and k (1 ≤ n, k ≤ 109) — the number of elements in the permutation and the lexicographical number of the permutation.

Output

If the k-th permutation of numbers from 1 to n does not exist, print the single number "-1" (without the quotes). Otherwise, print the answer to the problem: the number of such indexes i, that i and ai are both lucky numbers.

Examples

Input

7 4


Output

1


Input

4 7


Output

1

Note

A permutation is an ordered set of n elements, where each integer from 1 to n occurs exactly once. The element of permutation in position with index i is denoted as ai (1 ≤ i ≤ n). Permutation a is lexicographically smaller that permutation b if there is such a i (1 ≤ i ≤ n), that ai < bi, and for any j (1 ≤ j < i) aj = bj. Let's make a list of all possible permutations of n elements and sort it in the order of lexicographical increasing. Then the lexicographically k-th permutation is the k-th element of this list of permutations.

In the first sample the permutation looks like that:

1 2 3 4 6 7 5

The only suitable position is 4.

In the second sample the permutation looks like that:

2 1 3 4

The only suitable position is 4.
#include <bits/stdc++.h>
using namespace std;
const bool online_judge = true;
const long long inf = 1LL << 60;
long long toInt(string s) {
  long long res;
  stringstream ss;
  ss << s;
  ss >> res;
  return res;
}
string toString(long long n) {
  stringstream ss;
  ss << n;
  return ss.str();
}
long long fact(long long n) {
  if (n <= 1) return n;
  return n * fact(n - 1);
}
vector<long long> lucky;
void dfs(long long n, long long k) {
  lucky.push_back(n);
  if (k < 11) {
    dfs(n * 10 + 4, k + 1);
    dfs(n * 10 + 7, k + 1);
  }
}
bool is_lucky(long long n) {
  return binary_search((lucky).begin(), (lucky).end(), n);
}
void run() {
  long long n, k;
  cin >> n >> k;
  k--;
  if (n <= 15 && fact(n) <= k) {
    cout << -1 << endl;
    return;
  }
  vector<long long> v;
  for (long long j = 0; j < n; j++) v.push_back(j + 1);
  while (k > 100000) {
    long long i = 0;
    while (fact(i + 1) < k) i++;
    k -= fact(i);
    if (i) {
      vector<long long> tmp;
      for (long long j = 0; j < i; j++) {
        tmp.push_back(v[((long long)((v).size())) - 1]);
        v.pop_back();
      }
      long long tmp2 = v[((long long)((v).size())) - 1];
      v.pop_back();
      sort((tmp).rbegin(), (tmp).rend());
      v.push_back(tmp[((long long)((tmp).size())) - 1]);
      tmp.pop_back();
      tmp.push_back(tmp2);
      sort((tmp).begin(), (tmp).end());
      for (long long j = 0; j < ((long long)((tmp).size())); j++)
        v.push_back(tmp[j]);
    }
  }
  while (k--) next_permutation((v).begin(), (v).end());
  {
    if (!online_judge) {
      cerr << "v"
           << " = ";
      for (long long __i = 0; __i < ((long long)((v).size())); __i++) {
        cerr << v[__i] << ",";
      }
      cerr << endl;
    }
  };
  dfs(4, 0);
  dfs(7, 0);
  sort((lucky).begin(), (lucky).end());
  long long ans = 0;
  for (long long i = 0; i < ((long long)((lucky).size())); i++) {
    if (lucky[i] > n) break;
    if (is_lucky(v[lucky[i] - 1])) ans++;
  }
  cout << ans << endl;
}
int main(int argc, char *argv[]) {
  run();
  return 0;
}
