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.
import java.util.*;
import java.io.*;
import static java.lang.Math.*;

public class C{
    public static void main(String[] args) throws Exception{
        new C().run();
    }

    static final long M = 4444444444L;
    ArrayList<Long> ls = new ArrayList<Long>();
    void dfs(long cur){
        if(cur > M)return;
        if(cur!=0)ls.add(cur);
        dfs(cur*10+4);
        dfs(cur*10+7);
    }

    long[] fact = new long[14];

    void run() throws Exception{
        Scanner sc = new Scanner(System.in);
        //BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
        // only sc.readLine() is available
        dfs(0);
        Collections.sort(ls);
        //System.out.printf("ls size = %d\n", ls.size());
        fact[0] = fact[1] = 1;
        for(int i = 2; i < fact.length; i++)fact[i] = fact[i-1]*i;
        int n = sc.nextInt();
        long k = sc.nextInt()-1;
        if(n <= 13){
            if(k >= fact[n]){
                System.out.println(-1);
                return ;
            }
        }
        int ans = 0;
        int tail = min(n, 13);
        for(Long v : ls)if(v <= n-tail)ans++;
        ArrayList<Long> rest = new ArrayList<Long>();
        for(int i = tail-1; i >= 0; i--) rest.add((long)(n-i));
        int index = n - tail + 1;
        for(int i = 0; i < tail; i++){
            long val = 0;
            if(k >= fact[tail-i-1]){
                int w = (int)(k / fact[tail-i-1]);
                k %= fact[tail-i-1];
                val = rest.get(w);
                rest.remove((Long)val);
                if(Collections.binarySearch(ls, val) >= 0 && Collections.binarySearch(ls, 1L*index) >= 0)ans++;
            }else{
                val = rest.get(0);
                rest.remove((Long)val);
                if(Collections.binarySearch(ls, val) >= 0 && Collections.binarySearch(ls, 1L*index) >= 0)ans++;
            }
            //System.out.printf("%d is %d\n", index, val);
            index++;
        }
        System.out.println(ans);
    }
}
