#include <bits/stdc++.h>
using namespace std;
void solve(long long n, long long k) {
  printf("%lld %lld\n", n, k);
  if (n == 0 && k == 0) return;
  long long temp = ceil(((double)n) / k);
  long long i;
  for (i = 1; i < temp; i *= 2)
    ;
  printf("%lld ", i);
  solve(n - i, k - 1);
  return;
}
long long maxAllowed(long long n, long long k) {
  long long tn = 0;
  long long hp = 1;
  while (1) {
    if (n - hp < k - 1) {
      hp /= 2;
      break;
    }
    hp *= 2;
  }
  return hp;
}
void solve2(long long n, long long k) {
  while (n > 0 || k > 0) {
    long long temp = maxAllowed(n, k);
    printf("%lld ", temp);
    n = n - temp;
    k--;
  }
}
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  int sb = 0;
  int tn = n;
  while (tn > 0) {
    if (tn & 1 != 0) sb++;
    tn = tn >> 1;
  }
  if (k < sb || k > n) {
    printf("NO\n");
    return 0;
  } else
    printf("YES\n");
  solve2(n, k);
  printf("\n");
  return 0;
}
