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.math.BigInteger;
import java.util.*;

/**
 *
 * @author Mojtaba
 */
public class Main {

    public static void main(String[] args) throws IOException, Exception {
        MyScanner in = new MyScanner(System.in);
        //Scanner in = new Scanner(System.in);

        //Scanner in = new Scanner(inputFile);
        PrintWriter writer = new PrintWriter(new BufferedOutputStream(System.out));
        //PrintWriter writer = new PrintWriter(new File("output.txt"));

        int n = in.nextInt();
        int k = in.nextInt();

        String binary = Integer.toString(n, 2);
        int numberOfOnes = F(binary);
        if (k < numberOfOnes || k > n) {
            writer.println("no".toUpperCase());
        } else {
            writer.println("YES");
            int[] a = new int[binary.length()];
            for (int i = 0; i < a.length; i++) {
                if (binary.charAt(i) == '1') {
                    a[i]++;
                }
            }
            while (numberOfOnes != k) {
                for (int i = 0; i < a.length; i++) {
                    while (a[i] > 0 && i < a.length - 1) {
                        a[i]--;
                        a[i + 1] += 2;
                        numberOfOnes++;
                        if (numberOfOnes == k) {
                            break;
                        }
                    }
                    if(numberOfOnes == k){
                        break;
                    }
                }
            }
            for (int i = 0; i < a.length; i++) {
                while (a[i] > 0) {
                    writer.print((1 << (a.length - i - 1)) + " ");
                    a[i]--;
                }
            }
        }

        writer.flush();
        in.close();
    }

    private static int F(String binary) {
        int s = 0;
        for (int i = 0; i < binary.length(); i++) {
            if (binary.charAt(i) == '1') {
                s++;
            }
        }
        return s;
    }
}

class MyScanner {

    BufferedReader reader;
    StringTokenizer tokenizer;

    public MyScanner(InputStream stream) {
        this.reader = new BufferedReader(new InputStreamReader(stream));
    }

    public int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    public int[] nextIntegerArray(int n) throws IOException {
        int[] a = new int[n];
        for (int i = 0; i < a.length; i++) {
            a[i] = nextInt();
        }
        return a;
    }

    public long[] nextLongArray(int n) throws IOException {
        long[] a = new long[n];
        for (int i = 0; i < a.length; i++) {
            a[i] = nextLong();
        }
        return a;
    }

    public int nextInt(int radix) throws IOException {
        return Integer.parseInt(next(), radix);
    }

    public long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    public long nextLong(int radix) throws IOException {
        return Long.parseLong(next(), radix);
    }

    public double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    public BigInteger nextBigInteger() throws IOException {
        return new BigInteger(next());
    }

    public BigInteger nextBigInteger(int radix) throws IOException {
        return new BigInteger(next(), radix);
    }

    public String next() throws IOException {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(reader.readLine());
            return this.next();
        }
        return tokenizer.nextToken();
    }

    public String nextLine() throws IOException {
        return reader.readLine();

    }

    public void close() throws IOException {
        this.reader.close();
    }
}