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.*;

public class Main {

    public static void main(String[] args) {

        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {

            //int n = Integer.parseInt(reader.readLine());
            String[] line = reader.readLine().split(" ");
            int n = Integer.parseInt(line[0]);
            int k = Integer.parseInt(line[1]);

            char[] b = Integer.toBinaryString(n).toCharArray();
            int min = 0;
            ArrayList<Integer> cs = new ArrayList<>();
            for(char c : b) {
                //println(c);
                min += c - '0';
                cs.add(c - '0');
            }
            Collections.reverse(cs);

            if(k < min || k > n) {
                println("NO");
            } else {
                println("YES");
                int count = k - min;
                //println(count);
                int deg = 1;
                while(deg * 2 <= n) {
                    deg *= 2;
                }
                //println(deg);
                StringBuffer ans = new StringBuffer();
                for(int i = cs.size() - 1; i >= 0; i--) {
                    while(cs.get(i) > 0) {
                        if(count > 0 && i > 0) {
                            cs.set(i - 1, cs.get(i - 1) + 2);
                            count--;
                        } else {
                            ans.append(deg + " ");
                        }
                        cs.set(i, cs.get(i) - 1);
                    }
                    //println(ans.toString() + " " + deg);
                    deg /= 2;
                }
                println(ans.toString());
            }


        } catch (IOException e) {
        }
    }

    static int[] fastParse(String[] line) {
        int[] ans = new int[line.length];
        for(int i = 0; i < ans.length; i++) {
            ans[i] = Integer.parseInt(line[i]);
        }
        return ans;
    }

    static long[] fastParseToLong(String[] line) {
        long[] ans = new long[line.length];
        for(int i = 0; i < ans.length; i++) {
            ans[i] = Long.parseLong(line[i]);
        }
        return ans;
    }

    static int count(int a, int b, char act) {
        if(act == '&') {
            return a & b;
        } else if(act == '|') {
            return a | b;
        } else {
            return a ^ b;
        }
    }

    static int pow(int num, int deg) {
        int ans = num;
        while(deg > 0) {
            if(deg % 2 == 0) {
                ans *= ans;
                deg /= 2;
            } else {
                ans *= num;
                deg--;
            }
        }
        return ans;
    }

    static int log(int num, int d) {
        int ans = 0;
        while(num > 1) {
            num /= d;
            ans++;
        }
        return ans;
    }

    static class Pair implements Comparable<Pair> {
        char a;
        int b;
        Pair(char a, int b) {
            this.a = a;
            this.b = b;
        }

        @Override
        public int compareTo(Pair o) {
            if(this.a > o.a) {
                return 1;
            } else if(this.a < o.a) {
                return -1;
            }
            return 0;
        }
    }

    static String reverse(String s) {
        String ans = "";
        char[] c = s.toCharArray();
        for(int i = s.length() - 1; i >= 0; i--) {
            ans += c[i];
        }
        return ans;
    }

    static long gcd(long a, long b) {
        while(b != 0) {
            long c = a % b;
            a = b;
            b = c;
        }
        return a;
    }

    static long fac(int deg) {
        long ans = 1;
        for(int i = 2; i <= deg; i++) {
            ans *= i;
        }
        return ans;
    }

    static int r(int a, int b) {
        int ans = a / b;
        if(a % b != 0)
            ans++;
        return ans;
    }

    static void print(Object o) {
        System.out.print(o.toString());
    }

    static void println(Object o) {
        System.out.println(o.toString());
    }
}