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.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Main {

    static void solve() {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int k = scan.nextInt();
        if(k>n){
            System.out.println("NO");
            return;
        }
        String s = Integer.toBinaryString(n);
        List<Integer>powers = new ArrayList<>();
        Map<Integer, Integer>map = new HashMap<>();
        for(int i=0;i<s.length();i++){
            int ind = s.length()-i-1;
            if(s.charAt(i) == '1'){
                powers.add(ind);
                if(map.containsKey(ind)){
                    map.put(ind, map.get(ind)+1);
                }else{
                    map.put(ind, 1);
                }
//                list.add((int) Math.pow(2,ind));
            }
        }
        Collections.sort(powers);
        int sz = map.values().size();
//        int j = powers.size()-1;
        int power = powers.get(powers.size()-1);
        while(sz<k && power>=0){
            if(!map.containsKey(power)){
                power--;
                continue;
            }
            if(map.get(power) == 1){
                map.remove(power);
            }else {
                map.put(power, map.get(power)-1);
            }
            if(map.containsKey(power-1)){
                map.put(power-1, map.get(power-1)+2);
            }else{
                map.put(power-1,2);
            }
            sz++;
            if(!map.containsKey(power))
                power--;
        }
        List<Integer>res = new ArrayList<>();
        for(Map.Entry<Integer, Integer> entry: map.entrySet()){
            int cnt = entry.getValue();
            for(int i=0;i<cnt;i++){
                int val= (int) Math.pow(2,entry.getKey());
                res.add(val);
            }
        }
        if(res.size() > k){
            System.out.println("NO");
            return;
        }
        System.out.println("YES");
        for (int i=0;i<res.size();i++){
            System.out.print(res.get(i) + " ");
        }
    }


    public static void main(String[] args) {
//        int[] nums = new int[] {2,2,2};
//        int[] res = sortArrayByParity(nums);
//        System.out.println(res);
        solve();
//        Main m = new Main();
//        Scanner scan = new Scanner(System.in);
//        int n = scan.nextInt();
//        int k = scan.nextInt();
//        int[] arr = new int[k];
//        for (int i=0;i<k;i++){
//            arr[i]=scan.nextInt();
//        }
//        solve(n, arr);
//        scan.close();
    }
}