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 Q1 {

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader() {
            reader = new BufferedReader(new InputStreamReader(System.in), 32768);
            tokenizer = null;
        }

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(System.in), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public char nextChar() {
            return next().charAt(0);
        }

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

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

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

        public int[] nextIntArr(int n) {
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = this.nextInt();
            }
            return arr;
        }

        public Integer[] nextIntegerArr(int n) {
            Integer[] arr = new Integer[n];
            for (int i = 0; i < n; i++)
                arr[i] = new Integer(this.nextInt());

            return arr;
        }

        public int[][] next2DIntArr(int n, int m) {
            int[][] arr = new int[n][m];
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    arr[i][j] = this.nextInt();
                }
            }
            return arr;
        }

        public int[] nextSortedIntArr(int n) {
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = this.nextInt();
            }
            Arrays.sort(arr);
            return arr;
        }

        public long[] nextLongArr(int n) {
            long[] arr = new long[n];
            for (int i = 0; i < n; i++) {
                arr[i] = this.nextLong();
            }
            return arr;
        }

        public char[] nextCharArr(int n) {
            char[] arr = new char[n];
            for (int i = 0; i < n; i++) {
                arr[i] = this.nextChar();
            }
            return arr;
        }
    }


    public static void main(String[] args) {

        InputReader in = new InputReader();
        int a = in.nextInt(), b = in.nextInt();

        int input[] = new int[31];
        int flag = 0;
        input[0] = 1;
        for (int i = 1; i < 31; i++) {
            input[i] = input[i - 1] * 2;
            if (a == input[i]) {
                flag = 1;
            }
        }

        if (flag == 1 && b == 1) {
            System.out.println("YES");
            System.out.println(a);
            return;
        }

        int Answer[] = new int[b];

        for (int i = 0; i < Answer.length; i++)
            Answer[i] = 1;
        int target = a - (b);
        if (target < 0) {
            System.out.println("NO");
            return;
        }



        for (int j = 0; j < b; j++) {

            for (int i = 1; i < 31; i++) {
                int temp = input[i] - Answer[j];


                if (target == 0)
                    break;
                if (temp <= target) {
                    Answer[j] = input[i];
                    target -= temp;
                }

            }

        }


        if (target != 0) {
            System.out.println("NO");
            return;
        }


        System.out.println("YES");

        for (int i = 0; i < b; i++)
            System.out.print(Answer[i] + " ");

    }


}


// for(Map.Entry<Integer,Integer> Test: map.entrySet()){
////            int Key=Test.getKey();
////            int val=Test.getValue();
////        }


//        HashMap<Integer,Integer> map=new HashMap<>();
//        if(map.containsKey(input[i]))
//            map.put(input[i],map.get(input[i])+1);
//        else
//            map.put(input[i],1);
//
//