#include <bits/stdc++.h>
using namespace std;
struct node {
  int x;
  int num;
  bool operator<(const node& oth) const { return x > oth.x; }
} temp, temp2;
set<node> se;
set<node>::iterator it;
int main() {
  long long n, k;
  while (cin >> n >> k) {
    se.clear();
    int w = 0;
    while (n > 0) {
      if (n % 2) {
        temp.x = w;
        temp.num = 1;
        se.insert(temp);
      }
      n /= 2;
      w++;
    }
    int now = se.size();
    if (now > k)
      printf("No\n");
    else {
      printf("Yes\n");
      while (now < k) {
        temp = *se.begin();
        if (temp.num > k - now) {
          while (now < k) {
            it = se.end();
            it--;
            temp = *it;
            if (temp.num == 1) {
              se.erase(it);
              temp.x--;
              temp.num = 2;
              se.insert(temp);
            } else {
              temp.num--;
              se.erase(it);
              se.insert(temp);
              temp.x--;
              temp.num = 2;
              se.insert(temp);
            }
            now++;
          }
        } else {
          se.erase(temp);
          temp.x = temp.x - 1;
          temp.num = temp.num * 2;
          it = se.find(temp);
          if (it == se.end())
            se.insert(temp);
          else {
            temp2 = *it;
            se.erase(it);
            temp2.num += temp.num;
            se.insert(temp2);
          }
          now += temp.num / 2;
        }
      }
      int xx = 0;
      for (it = se.begin(); it != se.end(); it++) {
        for (int j = 1; j <= it->num; j++) printf("%d ", it->x);
      }
      printf("\n");
    }
  }
  return 0;
}
