#include <bits/stdc++.h>
using namespace std;
const int nmax = 1000010;
long long MIN = ((long long)1 << 63) - 1;
long long MAX = -MIN;
long long n, k, m, mt;
long long a;
long long met[nmax];
long long km = 400010;
void solve() {
  cin >> n >> k;
  for (long long i = 0; i <= 61; ++i) {
    if (n & ((long long)1 << i)) {
      ++met[km + i];
      MAX = max(MAX, (long long)i);
      MIN = min(MIN, (long long)i);
      ++m;
    }
  }
  if (m > k) {
    cout << "No";
    return;
  }
  for (long long i = MAX; i >= -200000; --i) {
    if (m == k) break;
    if (met[km + i] > 0) {
      long long c = met[km + i];
      if (c + m >= k) {
        long long d = k - m;
        met[km + i - 1] += 2 * d;
        met[km + i] -= d;
        if (met[km + i]) {
          met[km + i - 1] -= 2 * d;
          met[km + i] += d;
          for (int j = -300000; j <= i; ++j) {
            if (met[km + j]) {
              int id = 1, curid = j;
              while (d > 0) {
                --met[km + curid];
                met[km + curid - 1] += 2;
                --d;
                --curid;
              }
              break;
            }
          }
        }
        m = k;
      } else {
        met[km + i - 1] += 2 * met[km + i];
        m += c;
        met[km + i] = 0;
      }
    }
  }
  if (mt) {
  }
  cout << "Yes" << endl;
  for (long long i = 64; i >= -200010; --i) {
    while (met[km + i] > 0) {
      cout << i << ' ';
      --met[km + i];
    }
  }
}
int main() {
  int t = 1;
  for (int i = 0; i < t; ++i) {
    solve();
  }
  return 0;
}
