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.math.*;
import java.util.*;


// author @mdazmat9
public class CodeForces_CA {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        PrintWriter out = new PrintWriter(System.out);
        int test = 1;
        for (int ind = 0; ind < test; ind++) {
            int n = sc.nextInt();
            int k=sc.nextInt();
            if(n<k)
                out.println("NO");
            else if(n==k) {
                out.println("YES");
                for (int i = 0; i < n; i++)
                    out.print("1 ");
            }

            else {
               if(n-k<=k)
                   lessthank(n,k);
               else{
                   ArrayList<Integer> list=new ArrayList<>();
                   int t=-1;
                   while (n-k>k){

                       if(k==1){
                           if(isPowerOfTwo(n)) {
                               list.add(n);
                               k--;
                               n-=n;
                               break;

                           }
                           else {
                               t=2;
                               break;

                           }

                       }
                       if(k==0){
                           t=0;

                       }
                       int x=(int)(Math.log10((double) (n-k+1 ))/Math.log10((double) 2));
                       int add=(int)Math.pow((double)2,(double) x);
                       list.add(add);
                       k--;
                       n-=add;

                   }


                   if((t==0 && n!=0) || t==2)
                       out.println("NO");
                  else if(n==0 && k==0){
                       out.println("YES");
                       Collections.sort(list);
                       for (int i=0;i<list.size();i++)
                           out.print(list.get(i)+" ");
                   }
                   else {
                       lessthank(n, k);
                       Collections.sort(list);
                       for (int i=0;i<list.size();i++)
                           out.print(list.get(i)+" ");
                   }




               }

            }

        }
        out.flush();
    }
    static boolean isPowerOfTwo (int x)
    {
      /* First x in the below expression is
        for the case when x is 0 */
        return x!=0 && ((x&(x-1)) == 0);

    }

    static void lessthank(int n,int k) {
            int count = n - k;
            if (count <= k) {
                System.out.println("YES");
                for (int i = 1; i <= k - count; i++)
                    System.out.print("1 ");
                for (int i = 1; i <= count; i++)
                    System.out.print("2 ");

            }

    }





    static long gcd(long a , long b)
    {
        if(b == 0)
            return a;
        return gcd(b , a % b);
    }

}
class Scanner {
    public BufferedReader reader;
    public StringTokenizer st;

    public Scanner(InputStream stream) {
        reader = new BufferedReader(new InputStreamReader(stream));
        st = null;
    }

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

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

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

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

class OutputWriter {
    BufferedWriter writer;

    public OutputWriter(OutputStream stream) {
        writer = new BufferedWriter(new OutputStreamWriter(stream));
    }

    public void print(int i) throws IOException {
        writer.write(i);
    }

    public void print(String s) throws IOException {
        writer.write(s);
    }

    public void print(char[] c) throws IOException {
        writer.write(c);
    }

    public void close() throws IOException {
        writer.close();
    }

}