#include <bits/stdc++.h>
using namespace std;
void calc1(int rest, int cur, int rk) {
  long long invlarge = 1;
  invlarge <<= (-cur);
  long long q = rest * invlarge;
  if (q == rk) {
    for (int i = 0; i < q; i++) cout << cur << " ";
    cout << endl;
    return;
  }
  for (int i = 1; i < q; i++) cout << cur << " ";
  for (int i = q; i < rk; i++) {
    cur--;
    cout << cur << " ";
  }
  cout << cur << endl;
}
void calc0(long long rest, int cur, int rk) {
  if (rk == 0) {
    cout << endl;
    return;
  }
  if (cur <= 0) {
    calc1(rest, cur, rk);
    return;
  }
  long long large = 1;
  large <<= cur;
  long long q = rest / large, r = rest % large;
  for (int i = 0; i < q - 1; i++) cout << cur << " ";
  if (r > 0 || rk == q) {
    if (q > 0) cout << cur << " ";
    calc0(r, cur - 1, rk - q);
  } else
    calc0(large, cur - 1, rk - q + 1);
}
int main() {
  ios::sync_with_stdio(false);
  long long n;
  int k;
  cin >> n >> k;
  long long tmp = n;
  int num1 = 0;
  while (tmp > 0) {
    if (tmp & 1) num1++;
    tmp >>= 1;
  }
  if (num1 > k) {
    cout << "No" << endl;
    return 0;
  }
  cout << "Yes" << endl;
  double lf = log((double)n / k) / log(2);
  int le = (int)lf, ri = log(n) / log(2);
  if (lf > (1e-8) + le) le++;
  if (le <= 0) {
    calc1(n, le, k);
    return 0;
  }
  int f, q;
  long long large, r;
  for (f = le; f <= ri; f++) {
    large = 1;
    large <<= f;
    q = n / large;
    r = n % large, tmp = r;
    num1 = 0;
    while (tmp > 0) {
      if (tmp & 1) num1++;
      tmp >>= 1;
    }
    if (num1 <= k - q) break;
  }
  calc0(n, f, k);
}
