#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int n;
long long m;
bool check(int t) {
  long long sum = 0;
  for (long long i = 0, j = 1, k = 1; i < n; i += j, j *= t, k++)
    sum += min((long long)n - i, j) * k;
  return sum > m;
}
int dep[N], tot[N], deg[N];
inline void calc(int t) {
  long long sum = 0;
  int now = 0, tmp, k = 1;
  for (long long i = 0, j = 1; i < n; i += j, j *= t, k++) {
    tmp = min((long long)n - i, j);
    sum += 1ll * tmp * k;
    for (int l = (1), end_i = (tmp); l <= end_i; l++)
      dep[l + now] = k, tot[k]++;
    now += tmp;
  }
  k--;
  sum = m - sum;
  for (int i = n; sum; i--) {
    ++k;
    if (tot[dep[i]] == 1) --i;
    tmp = min(sum, (long long)k - dep[i]);
    tot[dep[i]]--;
    dep[i] += tmp;
    sum -= tmp;
    tot[dep[i]]++;
  }
  puts("Yes");
  sort(dep + 2, dep + n + 1);
  int j = 1;
  for (int i = (2), end_i = (n); i <= end_i; i++) {
    for (; dep[j] != dep[i] - 1 || deg[j] == t; j++)
      ;
    deg[j]++;
    printf("%d ", j);
  }
}
int main() {
  cin >> n >> m;
  if (!(2 * n - 1 <= m && m <= 1ll * n * (n + 1) / 2)) puts("No"), exit(0);
  int l = 1, r = n - 1, mid;
  for (; l <= r;) {
    mid = l + r >> 1;
    if (check(mid))
      l = mid + 1;
    else
      r = mid - 1;
  }
  r = l;
  calc(r);
  return 0;
}
