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>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define pi 3.141592653589793238
#define int long long
using namespace __gnu_pbds;
using namespace std;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;


const int MAX_CHAR = 26; 
const int MAX_FACT = 20; 
int fact[MAX_FACT]; 
string ans;
char str[50];
// utility for calculating factorials 
void precomputeFactorials() 
{ 
    fact[0] = 1; 
    for (int i = 1; i < MAX_FACT; i++) 
        fact[i] = fact[i - 1] * i; 
} 
  
// function for nth permutation 
void nPermute(char str[], int n) 
{ 
    precomputeFactorials(); 
  
    // length of given string 
    int len = strlen(str); 
  
    // Count frequencies of all 
    // characters 
    int freq[MAX_CHAR] = { 0 }; 
    for (int i = 0; i < len; i++) 
        freq[str[i] - 'a']++; 
  
    // out string for output string 
    char out[MAX_CHAR]; 
  
    // iterate till sum equals n 
    int sum = 0; 
    int k = 0; 
  
    // We update both n and sum in this 
    // loop. 
    while (sum != n) { 
  
        sum = 0; 
        // check for characters present in freq[] 
        for (int i = 0; i < MAX_CHAR; i++) { 
            if (freq[i] == 0) 
                continue; 
  
            // Remove character 
            freq[i]--; 
  
            // calculate sum after fixing 
            // a particuar char 
            int xsum = fact[len - 1 - k]; 
            for (int j = 0; j < MAX_CHAR; j++) 
                xsum /= fact[freq[j]]; 
            sum += xsum; 
  
            // if sum > n fix that char as 
            // present char and update sum 
            // and required nth after fixing 
            // char at that position 
            if (sum >= n) { 
                out[k++] = i + 'a'; 
                n -= (sum - xsum); 
                break; 
            } 
  
            // if sum < n, add character back 
            if (sum < n) 
                freq[i]++; 
        } 
    } 
  
    // if sum == n means this char will provide its 
    // greatest permutation as nth permutation 
    for (int i=MAX_CHAR-1; k < len && i >= 0; i--) 
        if (freq[i]) { 
            out[k++] = i + 'a'; 
            freq[i++]--; 
        } 
  
    // append string termination 
    // character and print result 
    out[k] = '\0'; 
    ans=out;
} 

signed main()
{
     ios_base::sync_with_stdio(false);
     cin.tie(NULL);  
     cout.tie(0);   
 #ifndef ONLINE_JUDGE
    if(fopen("INPUT.txt","r"))
    {
    freopen ("INPUT.txt" , "r" , stdin);
    freopen ("OUTPUT.txt" , "w" , stdout);
    }
 #endif
 
// -------------------------------------Code starts here---------------------------------------------------------------------     

   int n,k;
   cin>>n>>k;
   if(n>7)
   {
      int z=1;
      for(int i=n-7;i>=1;i--)
      {
         z*=i;
         if(z>=k)
         {
            cout<<2;
            return 0;
         }
      }      
   }
   int zz=1;
   for(int i=1;i<=n;i++)
   {
      zz*=i;      
   }
   if(zz<k)
   {
      cout<<-1;
      return 0;
   }

   for(int i=0;i<n;i++)   
   {
      str[i]=char(97+i);
   }

   nPermute(str,k);

   int cnt=0;
   if(n>=3)
   if(ans[3]=='d')
      cnt++;
   if(n>=7)
   if(ans[6]=='g')
      cnt++;
   cout<<cnt;

// -------------------------------------Code ends here------------------------------------------------------------------
     clock_t clk;
 	clk = clock();
 
    clk = clock() - clk;
 	cerr << fixed << setprecision(6) << "Time: " << ((double)clk)/CLOCKS_PER_SEC << "\n";
 	return 0;
 }
 