#include <bits/stdc++.h>
using namespace std;
long long n, k;
map<int, long long> vis;
int main() {
  cin >> n >> k;
  int p = 0, cnt = 0;
  while (n) {
    if (n % 2) vis[p]++, cnt++;
    n >>= 1;
    p++;
  }
  p += 2;
  if (cnt > k) {
    cout << "No" << endl;
    return 0;
  }
  k = k - cnt;
  while (1) {
    while (vis[p] == 0) p--;
    if (vis[p] > k)
      break;
    else {
      k -= vis[p];
      vis[p - 1] += 2 * vis[p];
      vis[p] = 0;
      p--;
    }
  }
  multiset<int> s;
  for (auto x = vis.begin(); x != vis.end(); x++)
    while (x->second--) s.insert(x->first);
  cout << "Yes" << endl;
  cnt = 0;
  for (auto x = s.rbegin(); x != s.rend(); x++) {
    if (cnt == s.size() - 1) {
      int v = *x - 1;
      if (k > 0) {
        for (int i = 1; i <= k; i++) cout << v-- << " ";
        cout << ++v << endl;
        break;
      }
    }
    cout << *x << " ";
    cnt++;
  }
}
