#include <bits/stdc++.h>
using namespace std;
long long n, k, p[61], p2[61];
int main() {
  scanf("%lld%lld", &n, &k);
  long long sz = 0;
  for (long long i = 0; i <= 60; i++) {
    if ((1ll << i) & n) {
      p[i]++;
      sz++;
    }
  }
  if (sz > k) {
    puts("No");
    return 0;
  }
  bool f = 0;
  for (int i = 60; i > 0 && sz < k; i--) {
    if ((sz + p[i]) <= k) {
      p[i - 1] += 2 * p[i];
      sz += p[i];
      p[i] = 0;
    } else {
      f = 1;
      break;
    }
  }
  int at = -1;
  for (int i = 0; i <= 60; i++) {
    if (p[i]) {
      at = i;
      break;
    }
  }
  if (at != -1) {
    for (int i = at; i > 0 && sz < k; i--) {
      p[i - 1] += 2;
      p[i]--;
      sz++;
    }
  }
  vector<long long> v;
  int neg = 0;
  if (sz < k) {
    if (!f && (sz + p[0]) <= k) {
      neg = 2 * p[0];
      sz += p[0];
      p[0] = 0;
    } else {
      f = 1;
      p[0]--;
      neg = 2;
      sz++;
    }
  }
  for (int i = 60; i >= 0; i--)
    for (int j = 0; j < p[i]; j++) v.push_back((long long)i);
  long long last = 1;
  for (long long i = 1; i <= (long long)1e18 && sz < k; i++) {
    if (!f && (sz + neg) <= k) {
      sz += neg;
      neg *= 2;
    } else {
      f = 1;
      for (int j = 0; j < neg - 1; j++) v.push_back(-i);
      sz++;
      neg = 2;
    }
    last = i + 1;
  }
  for (int j = 0; j < neg; j++) v.push_back(-last);
  if (sz == k) {
    puts("Yes");
    for (int i = 0; i < v.size(); i++) printf("%s%lld", (i ? " " : ""), v[i]);
    puts("");
    return 0;
  } else
    puts("No");
  return 0;
}
