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.lang.instrument.Instrumentation;
import java.util.ArrayList;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        PrintWriter out = new PrintWriter(System.out);
        Main mm = new Main();
        mm.problemC(new Input(new BufferedReader(new InputStreamReader(System.in))), out);
        out.close();
    }

    static void problemE(Input in, PrintWriter out) throws IOException {
        int n=in.nextInt();
        String s=in.next();
        int[] a=new int[n+1];
        for (int i = 1; i < n+1; i++) {
            if(s.charAt(i)=='(')
                a[i]=a[i-1]+1;
            else
                a[i]=a[i-1]-1;
        }
        if(Math.abs(a[n])!=2){
            out.println(0);
        }else{

        }
        out.println();
    }

    static void problemD(Input in, PrintWriter out) throws IOException {
        int n=in.nextInt();
        int[][] a=new int[n+1][2];
        for (int i = 1; i <= n; i++) {
            a[i][0]=in.nextInt();
            a[i][1]=in.nextInt();
        }

        if(n==3){
            out.println("1 2 3");
            return;
        }

        for (int i = 1; i <= n; i++) {
            if(!(a[a[i][0]][0]==a[i][1] || a[a[i][0]][1]==a[i][1])){
                int t=a[i][0];a[i][0]=a[i][1];a[i][1]=t;
            }
        }
        int k=1;
        for (int i = 1; i <= n; i++) {
            out.print(k);
            out.print(' ');
            k=a[k][0];
        }
        out.println();
    }

    static void problemC(Input in, PrintWriter out) throws IOException {
        final int[] b={1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824};
        int[] res=new int[32];
        int n=in.nextInt(),k=in.nextInt(),l=0,t=(int)(Math.log(n)/Math.log(2))+1;
        for (int i = 0; i < t; i++) {
           if((b[i] & n) == b[i]){
               l++;
               res[i]=1;
           }
        }
        if(l>k || k>n){
            out.println("NO");
        }else{
            while(l!=k){
                int r=1,j=0;
                for (int i = t; i >0 ; i--) {
                    if(res[i]!=0){
                        j=i;
                        break;
                    }
                }
                while(b[r]-1<=k-l && b[r]-1<=b[j])r++;
                r--;
                l+=b[r]-1;
                res[j]--;
                res[j-r]+=b[r];

            }
            out.println("YES");
            for (int i = 0; i < t; i++) {
                for (int j = 0; j < res[i]; j++) {
                    out.print(b[i]);
                    out.print(' ');
                }
            }
        }

    }

    static void problemA(Input in, PrintWriter out) throws IOException {
        int n=in.nextInt();
        int k=0;
        String s=in.next();
        for (int i = 0; i < n; i++) {
            out.print(s.charAt(i));
            i+=k++;
        }
        out.println();
    }

    static void problemB(Input in, PrintWriter out) throws IOException {
        int n=in.nextInt(),mx1=0,mx2=0,mn1=100001,mn2=100001,t;
        for (int i = 0; i < n; i++) {
            int a=in.nextInt();
            if(a>mx1){
                mx1=a;
                if(mx1>mx2){
                    t=mx2;mx2=mx1;mx1=t;
                }
            }
            if(a<mn1){
                mn1=a;
                if(mn1<mn2){
                    t=mn2;mn2=mn1;mn1=t;
                }
            }
        }
        out.println(Math.min(mx2-mn1,mx1-mn2));
        out.println();
    }

    static class Input {
        BufferedReader in;
        StringBuilder sb = new StringBuilder();

        public Input(BufferedReader in) {
            this.in = in;
        }

        public Input(String s) {
            this.in = new BufferedReader(new StringReader(s));
        }

        public String next() throws IOException {
            sb.setLength(0);
            while (true) {
                int c = in.read();
                if (c == -1) {
                    return null;
                }
                if (" \n\r\t".indexOf(c) == -1) {
                    sb.append((char) c);
                    break;
                }
            }
            while (true) {
                int c = in.read();
                if (c == -1 || " \n\r\t".indexOf(c) != -1) {
                    break;
                }
                sb.append((char) c);
            }
            return sb.toString();
        }

        public char nextChar() throws IOException {
            while (true) {
                int c = in.read();
                if (c == -1) {
                    return (char) c;
                }
                if (" \n\r\t".indexOf(c) == -1) {
                    return (char) c;
                }
            }
        }

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

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

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