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.io.*;
import java.math.*;
/**
 *
 * @author alanl
 */
public class Main{
    static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    public static void main(String[] args) throws IOException{
         long n = readInt(), k = readInt();
         ArrayList<Long>arr = new ArrayList();
         Queue<Long>Q = new LinkedList();
         long cur = 1;
         while(cur<=n){
             arr.add(cur);
             cur*=2;
         }
         while(n!=0){
             int left = 0, right = arr.size()-1;
             while(left<=right){
                 int mid = (left+right)/2;
                 if(arr.get(mid)==n){
                     right = mid;
                     break;
                 }
                 else if(arr.get(mid)>n){
                     right = mid-1;
                 }
                 else left = mid+1;
             }
             n-=arr.get(right);
             Q.add(arr.get(right));
         }
         ArrayList<Long>ans = new ArrayList();
         if(Q.size()!=k){
             if(Q.size()>k)println("NO");
             else{
                 while(!Q.isEmpty() && Q.size()+ans.size()!=k){
                     long val = Q.poll();
                     if(val!=1){
                         Q.add(val/2);
                         Q.add(val/2);
                     }
                     else ans.add(val);
                 }
                 while(!Q.isEmpty()){
                     ans.add(Q.poll());
                 }
                 if(ans.size()!=k)println("NO");
                 else{
                     Collections.sort(ans);
                     println("YES");
                     for(long i:ans)print(i+" ");
                     println();
                 }
             }
         }
         else{
             println("YES");
             while(!Q.isEmpty())print(Q.poll()+" ");
             println();
         }
    }
    static String next () throws IOException {
        while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(input.readLine().trim());
        return st.nextToken();
    }
    static long readLong () throws IOException {
        return Long.parseLong(next());
    }
    static int readInt () throws IOException {
        return Integer.parseInt(next());
    }
    static double readDouble () throws IOException {
        return Double.parseDouble(next());
    }
    static char readChar () throws IOException {
        return next().charAt(0);
    }
    static String readLine () throws IOException {
        return input.readLine().trim();
    }
    static void print(Object b) {
        System.out.print(b);
    }
    static void println(Object b) {
        System.out.println(b);
    }
    static void println() {
        System.out.println();
    }
}