#include <bits/stdc++.h>
using namespace std;
long long n, k, i, onew = 1, p;
priority_queue<long long> q;
priority_queue<long long, vector<long long>, greater<long long> > pq;
int main() {
  cin >> n >> k;
  for (i = 62; i >= 0; i--) {
    if (i < 0) break;
    if ((onew << i) & n) q.push(i);
  }
  if (q.size() > k) {
    printf("No\n");
    return 0;
  } else if (q.size() <= k) {
    while (q.size() < k) {
      i = q.top();
      q.pop();
      q.push(i - 1);
      q.push(i - 1);
    }
    printf("Yes\n");
    long long mx = -1e9;
    while (!q.empty()) {
      pq.push(q.top());
      mx = max(q.top(), mx);
      q.pop();
    }
    vector<long long> stor;
    while (pq.size() >= 2) {
      long long dd1 = pq.top();
      pq.pop();
      long long dd2 = pq.top();
      pq.pop();
      if (dd1 == dd2 and dd1 < mx) {
        pq.push(dd1 + 1);
      } else if (dd1 == dd2) {
        stor.push_back(dd1);
        stor.push_back(dd2);
      } else {
        stor.push_back(min(dd1, dd2));
        pq.push(max(dd1, dd2));
      }
    }
    for (auto x : stor) {
      pq.push(x);
    }
    stor.clear();
    while (pq.size() < k) {
      int to = pq.top();
      pq.pop();
      pq.push(to - 1);
      pq.push(to - 1);
    }
    while (!pq.empty()) {
      stor.push_back(pq.top());
      pq.pop();
    }
    sort(stor.begin(), stor.end(), greater<long long>());
    for (auto x : stor) cout << x << " ";
  } else
    printf("No\n");
  return 0;
}
