#include <bits/stdc++.h>
using namespace std;
int tabqu[10000000 + 1];
int fr, en;
int Error = 0;
void InitQueue(void) { fr = en = 0; }
void Enqueue(int el) {
  tabqu[en++] = el;
  if (en > 10000000) en = 0;
  if (en == fr) Error = 1;
}
void Dequeue(int *el) {
  if (fr != en) {
    *el = tabqu[fr++];
    if (fr > 10000000) fr = 0;
  } else
    Error = 1;
}
char QueueEmpty(void) { return fr == en; }
int main() {
  int n;
  cin >> n;
  int k;
  cin >> k;
  int pow2 = 1;
  int ilepot = 0;
  int npom = n;
  while (npom >= pow2) {
    if ((npom - pow2) % (2 * pow2) == 0) {
      npom = npom - pow2;
      Enqueue(pow2);
      pow2 = pow2 * 2;
      ilepot++;
    } else
      pow2 = pow2 * 2;
  }
  if (ilepot <= k && k <= n) {
    cout << "YES" << endl;
    int i = 0;
    while (i < k - ilepot) {
      int z;
      Dequeue(&z);
      if (z == 1) {
        Enqueue(z);
      } else {
        Enqueue(z / 2);
        Enqueue(z / 2);
        i++;
      }
    };
    while (fr != en) {
      int p;
      Dequeue(&p);
      cout << p << " ";
    }
  } else {
    cout << "NO";
  }
  return 0;
}
