#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &num) {
  T x = 0, f = 1;
  char ch = getchar();
  for (; ch > '9' || ch < '0'; ch = getchar())
    if (ch == '-') f = -1;
  for (; ch <= '9' && ch >= '0'; ch = getchar())
    x = (x << 3) + (x << 1) + (ch ^ '0');
  num = x * f;
}
int n, k, tot;
void NO() {
  puts("NO");
  exit(0);
}
bool OK(int x) { return x - (x & (-x)) == 0; }
int main() {
  read(n);
  read(k);
  if (n % 2 == 0) NO();
  if (k > max((n - 3) / 2, 0)) NO();
  if (n == 9 && k == 2) NO();
  if (OK(n + 1) && k == 1) NO();
  if (!OK(n + 1) && !k) NO();
  if (n == 1) {
    puts("YES\n0\n");
    return 0;
  }
  if (OK(n + 1) && !k) {
    puts("YES");
    for (int i = 1; i <= n; i++) {
      printf("%d ", tot + (i >> 1));
    }
    return 0;
  }
  puts("YES");
  for (int i = 1, j = 0; i < k; i++) {
    printf("%d %d ", j, ++tot);
    j = tot++;
  }
  if (!OK(n - tot + 1)) {
    printf("%d ", tot ? tot - 1 : 0);
    for (int i = 2; i <= n - tot; i++) {
      printf("%d ", tot + (i >> 1));
    }
  } else {
    printf("%d ", tot ? tot - 1 : 0);
    for (int i = 2; i <= n - tot - 2; i++) {
      printf("%d ", tot + (i >> 1));
    }
    printf("2 2");
  }
  return 0;
}
