#include <bits/stdc++.h>
using namespace std;
const int NMAX = 300010;
long long dmin[NMAX];
long long dmax[NMAX];
int tata[NMAX];
int n;
int cnt;
int bract;
long long calc(int bract) {
  for (int i = 1; i <= n; i++) {
    dmax[i] = 1LL * i * (i + 1) / 2;
    int g = i - 1;
    int vbaza = g / bract;
    int nrbig = g % bract;
    dmin[i] = i + nrbig * dmin[vbaza + 1] + (bract - nrbig) * dmin[vbaza];
  }
  return dmin[n];
}
inline long long vmin(int g, int brleft) {
  if (brleft == 0) return 0;
  int vbaza = g / brleft;
  int nrbig = g % brleft;
  return nrbig * dmin[vbaza + 1] + (brleft - nrbig) * dmin[vbaza];
}
void build(int dim, int t, long long s) {
  int root = ++cnt;
  tata[cnt] = t;
  s -= dim;
  dim--;
  for (int brleft = bract - 1; dim; brleft--) {
    assert(brleft >= 0);
    int d = (dim + brleft) / (brleft + 1);
    for (int pas = 1, mult = 1; pas; pas = (mult ? 2 * pas : pas / 2)) {
      if (d + pas <= dim && dmin[d + pas] + vmin(dim - d - pas, brleft) <= s)
        d += pas;
      else
        mult = 0;
    }
    assert(d != 0);
    long long restmin = vmin(dim - d, brleft);
    long long gone = max(dmin[d], s - restmin);
    s -= gone;
    dim -= d;
    build(d, root, gone);
  }
}
int main() {
  long long s;
  scanf("%d%lld", &n, &s);
  int br = 0;
  for (int pas = 1, mult = 1; pas && pas <= 3 * n;
       pas = (mult ? 2 * pas : pas / 2)) {
    if (calc(br + pas) > s)
      br += pas;
    else
      mult = 0;
  }
  br++;
  bract = br;
  calc(br);
  if (dmax[n] < s || dmin[n] > s) {
    printf("No\n");
    return 0;
  }
  printf("Yes\n");
  build(n, 0, s);
  for (int i = 2; i <= n; i++) printf("%d ", tata[i]);
  return 0;
}
