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.util.*;
import java.lang.*;
import java.io.*;
public class Main{
	static Scanner sc = new Scanner(System.in);
	
	static long getl() {
		return sc.nextLong();
	}
	
	static int geti() {
		return sc.nextInt();
	}
	
	static String gets() {
		return sc.next();
	}
	
	static int[] intArr(int n) {
		int[] arr = new int[n];
		for(int i=0;i<n;i++) arr[i] = geti();
		return arr;
	}
	
	static long[] longArr(int n) {
		long[] arr = new long[n];
		for(int i=0;i<n;i++) arr[i] = getl();
		return arr;
	}
   
	static void print(String s) {
		System.out.print(s);
	}
	
	static void plarr(long[] arr) {
		for(int i=0;i<arr.length;i++) print(arr[i] + " ");
	}
	
	static void piarr(int[] arr) {
		for(int i=0;i<arr.length;i++) print(arr[i] + " ");
	}
	
	static long countOnes(String s) {
		long cnt = 0;
		for(int i=0;i<s.length();i++) {
			if(s.charAt(i)=='1')cnt++;
		}
		return cnt;
	}
	
	static int get2(int n){
	    int mm = 1;
	    while(mm*2<=n){
	        mm *= 2;
	    }
	    return mm;
	}
	
    public static void main(String args[]){
        int n = geti();
        int k = geti();
        String str = Integer.toBinaryString(n);
        int l = str.length();
        long min = countOnes(str);
        long max = n;
        if(k<min || k>max) {
        	print("NO");
        	return;
        }
        print("YES\n");
        ArrayList<Integer> arr = new ArrayList<>();
        long dif = k-min;
        int pow = 1;
        for(int i=l-1;i>=0;i--) {
        	 if(str.charAt(i)=='1') {
        		 arr.add(pow);
        	 }
        	 pow *=2;
        }     
        // print(arr+"");
      
        while(dif>0) {
        	int m = Collections.max(arr);
        	arr.remove(new Integer(Integer.toString(m)));
        	int mmm = get2((int)dif);
        
        	if(dif-mmm>(l-1) && m/mmm>0){
        	    for(int h=0;h<mmm;h++) arr.add(m/mmm);
        	    dif -= (mmm-1);
        	}
        	else{
        	    arr.add(m/2);
        	    arr.add(m/2);
        	    dif--;
        	}
        	
        }
       
    	for(int j=0;j<arr.size();j++) {
    		print(arr.get(j) + " ");
    	
    	}
        
    }
}