/*صل علي النبي*/
#include <bits/stdc++.h>
#include <unordered_set>
#include <unordered_map>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;
using namespace std;
#define ll long long
#define all(v) ((v).begin()), ((v).end())
#define sz(v) ((int)((v).size()))
#define Please_Not_Focus_To_My_Code ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//template<class T> using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define testCase int t;cin>>t;while(t--)
const int mod = 1e9 + 7;
//ceil -> (n + (d - 1))/d
//round+ -> (n + (d/2))/d
//round- -> (n - (d/2))/d
//getline(cin, s): for strings with spaces
// compare float nums abs(a-b) < 1e-9
void elwkel(){
ll n, k , sum{};
cin >> n >> k;
int v[32]{};
for (int i = 0; i < 31; i++) if(n & (1 << i))
v[i]++ , sum++;
if(sum == k){ // First Case when number of one`s in binary number == k
cout << "YES\n";
for (int i = 0; i < 32; i++){
for (int j = 0; j < v[i]; j++) if(v[i])
cout << (1 << i) << ' ';
}
}
else if(sum > k) // Second Case when when number of one`s in binary number > k -> IMPOSSIBLE
cout << "NO\n";
else{ // Last Case when when number of one`s in binary number > k -> lets shift greatest one
// in binary to prev bit (8 = 2 * 4 :) )
int cnt {};
for (int i = 31; i > 0; i--){
if(v[i]){
while(v[i] > 0){
v[i]-- , v[i - 1]+=2 ,cnt++;
if(cnt + sum == k) break;
}
}
if(cnt + sum == k) break;
}
if (cnt + sum != k)
cout << "NO\n";
else{
cout << "YES\n";
for (int i = 0; i < 32; i++){
if (v[i]){
while (v[i]>0){
v[i]--;
cout << (1 << i) << ' ';
}
}
}
}
}
}
signed main(){
/*<<<<<*/Please_Not_Focus_To_My_Code/*>>>>>*/
// testCase
{
/*/\/\/\/\/\/\/\/\/\/\/\/*/
/*/////*/elwkel();/*\\\\\*/
/*/\/\/\/\/\/\/\/\/\/\/\/*/
}
}