#include <bits/stdc++.h>
using namespace std;
inline long long readi() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
long long n, k;
int main() {
  n = readi(), k = readi();
  if (__builtin_popcountll(n) > k) {
    puts("No");
    return 0;
  }
  long long y = 0;
  while ((1ll << y) * k < n) y++;
  long long yy = 0;
  while ((1ll << yy) * n <= k) yy++;
  yy--;
  yy = -yy;
  vector<long long> res;
  if (yy >= 0) {
    priority_queue<int> pq;
    for (int i = 0; i < 63; i++) {
      if ((n >> i) & 1) {
        pq.push(i);
      }
    }
    while ((int)(pq).size() < k) {
      long long tmp = pq.top();
      pq.pop();
      pq.push(tmp - 1);
      pq.push(tmp - 1);
    }
    y = pq.top();
  }
  while (n) {
    if (yy < 0) {
      for (int i = 0; i < (1 << (-yy)); i++) {
        res.push_back(yy);
      }
      n--;
    } else {
      if (n >= (1ll << y)) {
        n -= (1ll << y);
        res.push_back(y);
      } else {
        y--;
      }
    }
  }
  while ((int)(res).size() < k) {
    long long tmp = res.back();
    res.pop_back();
    res.push_back(tmp - 1);
    res.push_back(tmp - 1);
  }
  puts("Yes");
  for (long long val : res) cout << val << ' ';
  cout << endl;
  return 0;
}
