#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
const ll INF = 1e9 + 7;
const int N = 1e5;
int main() {
  ll n, k;
  cin >> n >> k;
  vector<ll> res;
  ll st = 1;
  ll n1 = n;
  while (n1) {
    if (n1 & 1) res.push_back(st);
    st *= (ll)2;
    n1 /= 2;
  }
  if (res.size() > static_cast<size_t>(k) || k > n) {
    printf("NO\n");
    return 0;
  }
  printf("YES\n");
  int ost = k - static_cast<int>(res.size());
  if (res[0] == 1) {
    res.erase(res.begin());
    printf("1 ");
  }
  for (size_t i = 0; i < res.size(); i++) {
    if (ost) {
      ost++;
      deque<ll> tmp;
      tmp.push_back(res[i]);
      while (!tmp.empty()) {
        ll x = tmp.back();
        tmp.pop_back();
        if (x == 1) {
          printf("1 ");
          ost--;
        } else {
          tmp.push_back(x / 2);
          tmp.push_back(x / 2);
          if (tmp.size() == static_cast<size_t>(ost)) {
            for (auto& it : tmp) printf("%lld ", it);
            ost = 0;
            break;
          }
        }
      }
    } else
      printf("%lld ", res[i]);
  }
  return 0;
}
