#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e6 + 10;
const int MAX = 1e5 + 10;
const double eps = 1e-6;
priority_queue<int> q, Q;
long long s[MAX];
int main() {
  long long n, k;
  cin >> n >> k;
  int cnt = 0;
  while (n > 0) {
    long long b = 1;
    int a = 0;
    while (b * 2 <= n) b *= 2, a++;
    cnt++;
    q.push(a);
    Q.push(a);
    n -= b;
  }
  if (cnt > k) {
    cout << "No" << endl;
    return 0;
  }
  int temp = cnt;
  while (temp < k) {
    int a = Q.top();
    Q.pop();
    a--;
    Q.push(a);
    Q.push(a);
    temp++;
  }
  temp = Q.top();
  while (cnt < k) {
    int a = q.top();
    if (temp == a) break;
    q.pop();
    a--;
    q.push(a);
    q.push(a);
    cnt++;
  }
  temp = 0;
  while (q.size()) {
    s[temp++] = q.top();
    q.pop();
  }
  while (cnt < k) {
    s[cnt - 1] = s[cnt - 1] - 1;
    s[cnt] = s[cnt - 1];
    cnt++;
  }
  cout << "Yes" << endl;
  for (int i = 0; i < cnt; i++) {
    if (i == 0)
      cout << s[i];
    else
      cout << " " << s[i];
  }
  cout << endl;
  return 0;
}
