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

public class Codeforces{
	
	static class Reader{
		final private int BUFFER_SIZE = 1 << 16;
		private DataInputStream din;
		private byte[] buffer;
		private int bufferPoint, bytesRead;
		
		public Reader(){
			din = new DataInputStream(System.in);
			buffer = new byte[BUFFER_SIZE];
			bufferPoint = bytesRead = 0;
		}
		
		public Reader(String fileName) throws IOException{
			din = new DataInputStream(new FileInputStream(fileName));
			buffer = new byte[BUFFER_SIZE];
			bufferPoint = bytesRead = 0;
		}
		
		public String readLine() throws IOException{
			byte[] buf = new byte[100000];
			int cnt = 0, c;
			while((c = read()) != -1){
				if(c == '\n'){
					if(cnt == 0) continue;
					break;
				} 
				buf[cnt++] = (byte) c;
			}
			return new String(buf, 0, cnt).trim();
		}
		
		public String nn() throws IOException{
			byte[] buf = new byte[100000];
			int cnt = 0, c;
			while((c = read()) != -1){
				if(c == ' ' || c == '\n'){
					if(cnt == 0) continue;
					break;
				} 
				buf[cnt++] = (byte) c;
			}
			return new String(buf, 0, cnt).trim();
		}
		
		public int ni() throws IOException{
			int ret = 0;
			byte c = read();
			while(c <= ' ') c = read();
			boolean neg = (c == '-');
			if(neg) c = read();
			do{
				ret = ret * 10 + c - '0';
			}while((c = read()) >= '0' && c <= '9');
			if(neg) return -ret;
			return ret;
		}
		
		public long nl() throws IOException{
			long ret = 0;
			byte c = read();
			while(c <= ' ') c = read();
			boolean neg = (c == '-');
			if(neg) c = read();
			do{
				ret = ret * 10 + c - '0';
			}while((c = read()) >= '0' && c <= '9');
			if(neg) return -ret;
			return ret;
		}
		
		public double nd() throws IOException{
			double ret = 0, div = 1;
			byte c = read();
			while(c <= ' ') c = read();
			boolean neg = (c == '-');
			if(neg) c = read();
			do{
				ret = ret * 10 + c - '0';
			}while((c = read()) >= '0' && c <= '9');
			if(c == '.'){
				while((c = read()) >= '0' && c <= '9'){
					ret += (c - '0') / (div *= 10);
				}
			}
			if(neg) return -ret;
			return ret;
		}
		
		private void fillBuffer() throws IOException{
			bytesRead = din.read(buffer, bufferPoint = 0, BUFFER_SIZE);
			if(bytesRead == -1) buffer[0] = -1;
		}
		
		private byte read() throws IOException{
			if(bufferPoint == bytesRead) fillBuffer();
			return buffer[bufferPoint++];
		}
		
		public void close() throws IOException{
			if(din == null) return;
			din.close();
		}
	}
	
	private static PrintWriter out;
	
    public static void main(String[] args) throws IOException, CloneNotSupportedException{
		
		Reader sc = new Reader();
		out = new PrintWriter(new BufferedOutputStream(System.out));
		
		int n = sc.ni(), k = sc.ni();
		char[] cur1 = Integer.toBinaryString(n).toCharArray();
		LinkedList<Integer> list = countOnes(cur1);
		int cur = list.size();
		if(n < k || cur > k){
			out.println("NO"); out.flush();
			System.exit(0);
		}
		
		while(cur < k){
			int q = list.removeFirst();
			if(q == 1){
				out.println("NO"); out.flush();
				System.exit(0);
			}
			q /= 2;
			cur++;
			if(q == 1){
				list.addLast(1);
				list.addLast(1);
			}else{
				list.addFirst(q);
				list.addFirst(q);
			}
		}
		
		out.println("YES");
		for(Integer i: list) out.print(i + " ");
		
		sc.close();
		out.close();
    }
	
	private static LinkedList<Integer> countOnes(char[] cur){
		int ans = 0, n = cur.length;
		LinkedList<Integer> list = new LinkedList<>();
		for(int i = 0; i < n; i++) if(cur[i] == '1') list.add((int)Math.pow(2, n - 1 - i));
		Collections.sort(list, Collections.reverseOrder());
		return list;
	}
}