#include <bits/stdc++.h>
using namespace std;
int main() {
  long long n, k;
  scanf("%lld", &n);
  scanf("%lld", &k);
  long long x = __builtin_popcountll(n);
  if (x > k) {
    printf("No\n");
    return 0;
  }
  priority_queue<long long> q;
  unordered_map<long long, long long> m;
  long long i = 0;
  while (n > 0) {
    if (n % 2) {
      q.push(i);
      m.insert(make_pair(i, 1));
    }
    i++;
    n /= 2;
  }
  long long t1;
  while (x < k) {
    t1 = q.top();
    if (x + m[t1] > k) break;
    x += m[t1];
    m.erase(t1);
    while (q.top() == t1) {
      q.pop();
      q.push(t1 - 1);
      q.push(t1 - 1);
      if (m.find(t1 - 1) == m.end())
        m.insert(make_pair(t1 - 1, 2));
      else
        m[t1 - 1] += 2;
    }
  }
  priority_queue<long long, vector<long long>, greater<long long> > q1;
  while (!q.empty()) {
    q1.push(q.top());
    q.pop();
  }
  while (x < k) {
    t1 = q1.top();
    q1.pop();
    q1.push(t1 - 1);
    q1.push(t1 - 1);
    x++;
  }
  vector<long long> v;
  while (!q1.empty()) {
    v.push_back(q1.top());
    q1.pop();
  }
  sort(v.begin(), v.end(), greater<long long>());
  printf("Yes\n");
  for (vector<long long>::iterator it = v.begin(); it != v.end(); it++) {
    printf("%lld", *it);
    printf(" ");
  }
  printf("\n");
  return 0;
}
