#include <bits/stdc++.h>
using namespace std;
int main() {
  long long int n;
  int k;
  cin >> n >> k;
  int a[100] = {0}, l = 0;
  long long int nn = n;
  int num = 0;
  for (int i = 0;; i++) {
    if (nn % 2 == 0) {
      nn /= 2;
    } else {
      a[i] += 1;
      nn /= 2;
      num += 1;
    }
    if (nn == 0) {
      l = i;
      break;
    }
  }
  if (num > k) {
    cout << "NO" << endl;
    exit(0);
  }
  if (num == k) {
    cout << "YES" << endl;
    for (int i = l; i >= 0; i--) {
      if (a[i] > 0) {
        cout << i << ' ';
      }
    }
    exit(0);
  }
  if (num < k) {
    for (int i = l; i > 0; i--) {
      for (int j = 0;; j++) {
        if (a[i] > 0) {
          a[i] -= 1;
          a[i - 1] += 2;
          num += 1;
        }
        if (num == k) break;
        if (a[i] == 0) break;
      }
      if (num == k) break;
    }
    if (num == k) {
      cout << "YES" << endl;
      int max;
      long long int t = 1;
      for (int i = l; i >= 0; i--) {
        if (a[i] > 0) {
          max = i;
          break;
        }
      }
      for (int i = 0; i < max; i++) {
        t *= 2;
      }
      long long int nx = n;
      vector<int> v;
      int numm = 0;
      for (;;) {
        if (nx >= t) {
          nx -= t;
          v.push_back(max);
          numm++;
        } else {
          if (t >= 2)
            t /= 2;
          else {
            t = 1;
          }
          max -= 1;
        }
        if (nx == 0) break;
      }
      int ll = v.size();
      for (;;) {
        if (numm == k)
          break;
        else {
          int xx = v[ll - 1];
          v.pop_back();
          v.push_back(xx - 1);
          v.push_back(xx - 1);
          ll = v.size();
          numm++;
        }
      }
      vector<int>::iterator it;
      for (it = v.begin(); it != v.end(); it++) {
        cout << *it << ' ';
      }
      exit(0);
    } else {
      int last = 0, last_num = num;
      int now = -1, now_num = 0;
      for (;;) {
        last_num -= 1;
        now_num += 2;
        num += 1;
        if (num == k)
          break;
        else {
          if (last_num == 0) {
            last = now;
            last_num = now_num;
            now -= 1;
            now_num = 0;
          }
        }
      }
      cout << "YES" << endl;
      int max;
      if (last_num != 0)
        max = last;
      else
        max = now;
      double t = 1;
      for (int i = 0; i < -max; i++) {
        t /= 2;
      }
      double nx = n;
      vector<int> v;
      int numm = 0;
      for (;;) {
        if (nx >= t) {
          nx -= t;
          v.push_back(max);
          numm++;
        } else {
          if (t >= 2)
            t /= 2;
          else {
            t = 1;
          }
          max -= 1;
        }
        if (nx == 0) break;
      }
      int ll = v.size();
      for (;;) {
        if (numm == k)
          break;
        else {
          int xx = v[ll - 1];
          v.pop_back();
          v.push_back(xx - 1);
          v.push_back(xx - 1);
          ll = v.size();
          numm++;
        }
      }
      vector<int>::iterator it;
      for (it = v.begin(); it != v.end(); it++) {
        cout << *it << ' ';
      }
      exit(0);
    }
  }
  return 0;
}
