Problem: A positive integer x is called a power of two if it can be represented as x = 2^y, where y is a non-negative integer. So, the powers of two are 1, 2, 4, 8, 16, ....

You are given two positive integers n and k. Your task is to represent n as the sum of exactly k powers of two.

Input

The only line of the input contains two integers n and k (1 ≤ n ≤ 10^9, 1 ≤ k ≤ 2 ⋅ 10^5).

Output

If it is impossible to represent n as the sum of k powers of two, print NO.

Otherwise, print YES, and then print k positive integers b_1, b_2, ..., b_k such that each of b_i is a power of two, and ∑ _{i = 1}^{k} b_i = n. If there are multiple answers, you may print any of them.

Examples

Input


9 4


Output


YES
1 2 2 4 


Input


8 1


Output


YES
8 


Input


5 1


Output


NO


Input


3 7


Output


NO

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Main
{
    static StreamTokenizer n_in;
    static BufferedReader in;
    static PrintWriter out;

    public static int nextInt() throws IOException
    {
        n_in.nextToken();
        return (int)n_in.nval;
    }

    public static double nextDouble() throws IOException
    {
        n_in.nextToken();
        return n_in.nval;
    }

    public static String nextLine() throws IOException
    {
        n_in.nextToken();
        return n_in.sval;
    }

    public static <T> void printArrayList(ArrayList<T> a)
    {
        for (T i : a)
        {
            out.print(i);
            out.print(" ");
        }
    }

    public static void run() throws IOException
    {
        in = new BufferedReader(new InputStreamReader(System.in));
        //in = new BufferedReader(new FileReader("src/input.txt"));
        n_in = new StreamTokenizer(in);
        out = new PrintWriter(System.out);
    }

    public static void main(String[] args) throws IOException
    {
        run();
        int[] p = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824};
        int n = nextInt(), k = nextInt();
        int tn = n;
        ArrayList<Integer> log = new ArrayList<Integer>();
        for (int i = 0; tn != 0; i++, tn >>= 1)
        {
            if ((tn & 1) == 1)
                log.add(p[i]);
        }
        if (k < log.size() || n < k)
            out.print("NO");
        else
        {
            out.print("YES");
            while (log.size() != k)
                for (int i = 0; i < log.size() && log.size() != k; i++)
                {
                    Integer t = log.get(i);
                    if (t.intValue() != 1)
                    {
                        log.set(i, t / 2);
                        log.add(t / 2);
                    }
                }
            out.print("\n");
            printArrayList(log);
        }
        out.flush();
    }
}