#include <bits/stdc++.h>
using namespace std;
const int MaxN = 100100;
const int Mod = 1e9 + 7;
long long N, S;
long long p[MaxN];
long long deg[MaxN];
long long pref[MaxN];
long long depth[MaxN];
vector<long long> child[MaxN];
void solve(long long branch) {
  for (int j = (2); j < (N + 1); j++) {
    p[j] = j - 1;
    deg[j - 1] = 1;
    child[j - 1].push_back(j);
    depth[j] = j;
  }
  deg[N] = 0;
  if (branch == 1) {
    cout << "Yes" << endl;
    for (int j = (2); j < (N + 1); j++) {
      cout << p[j] << " ";
    }
    exit(0);
  }
  long long lo = 2 * N - 1;
  long long hi = N * (N + 1) / 2;
  if (S < lo || S > hi) {
    cout << "No" << endl;
    exit(0);
  }
  long long x = N - 2;
  long long i = N;
  long long z = 0;
  vector<long long> anchor;
  anchor.push_back(1);
  depth[1] = 1;
  while (S < hi) {
    while (deg[anchor[z]] >= branch) {
      for (auto w : child[anchor[z]]) {
        anchor.push_back(w);
        ;
        depth[w] = depth[anchor[z]] + 1;
      }
      z++;
      if (z > (long long)anchor.size()) {
        assert(false);
        cin.ignore();
      }
      x = (i - 1) - depth[anchor[z]];
    };
    ;
    if (S + x <= hi) {
      deg[p[i]]--;
      child[p[i]].pop_back();
      p[i] = anchor[z];
      deg[anchor[z]]++;
      assert(anchor[z] != i);
      child[anchor[z]].push_back(i);
      S += x;
      x--;
      i--;
    } else {
      x = (hi - S);
      p[i] = (i - 1) - x;
      S += x;
    }
  }
  cout << "Yes" << endl;
  for (int j = (2); j < (N + 1); j++) {
    cout << p[j] << " ";
  }
}
long long check() {
  for (int i = (1); i < (N + 1); i++) pref[i] = 1;
  for (long long i = N; i >= 2; i--) {
    pref[p[i]] += pref[i];
  }
  long long sum = 0;
  for (int i = (1); i < (N + 1); i++) {
    sum += pref[i];
  }
  return sum;
}
long long f(long long branch) {
  if (branch == 1) {
    return (N * (N + 1)) / 2;
  }
  for (long long i = 1; i <= N; i++) {
    deg[i] = 0;
  }
  long long cur = 1;
  for (long long i = 2; i <= N; i++) {
    while (deg[cur] >= branch) {
      cur++;
    }
    p[i] = cur;
    deg[cur]++;
  }
  long long ret = check();
  return ret;
}
void load() {
  cin >> N >> S;
  long long lo = 2 * N - 1;
  long long hi = N * (N + 1) / 2;
  if (S < lo || S > hi) {
    cout << "No" << endl;
    exit(0);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  load();
  long long lo = 1, hi = N - 1;
  while (lo < hi) {
    long long mid = (lo + hi) / 2;
    if (f(mid) <= S) {
      hi = mid;
    } else {
      lo = mid + 1;
    }
  };
  solve(lo);
  return 0;
}
