#include <bits/stdc++.h>
using namespace std;
long long n, s;
long long c[200050], d[200050], m[200050];
bool ext(int k) {
  long long i = 1, t = 1, h = 1;
  long long p = s;
  while (i <= n) {
    for (int j = 1; j <= t && i <= n; i++, j++) p -= h;
    t *= k;
    h++;
  }
  if (p < 0) return 0;
  return 1;
}
void res(int k) {
  memset(d, 0, sizeof(d));
  long long t = n * (n + 1) / 2 - s;
  for (int i = 2; i <= n; i++) d[i] = i - 1;
  m[1] = 1;
  for (int i = 2; i <= n; i++) m[i] = min(n, m[i - 1] * k);
  c[0] = 0;
  for (int i = 1; i <= n; i++) c[i] = 1;
  int h = 1, p = n;
  while (t > 0) {
    while (c[h] == m[h]) h++;
    if (t < p - h)
      c[p - t]++, t = 0;
    else
      c[h]++, t -= p - h;
    if (--c[p] == 0)
      ;
    p--;
  }
  for (int h = 2; h <= p; h++) {
    for (int i = 0; i < c[h]; i++) printf("%d ", c[h - 2] + 1 + i / k);
    c[h - 1] += c[h - 2];
  }
}
int main() {
  cin >> n >> s;
  if (s < (2 * n - 1) || s > n * (n + 1) / 2) {
    puts("No");
    return 0;
  }
  puts("Yes");
  int l = 1, r = n;
  while (l < r) {
    int p = (l + r) / 2;
    if (ext(p))
      r = p;
    else
      l = p + 1;
  }
  res(r);
  return 0;
}
