#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const long long mod7 = 1000000007LL;
inline long long getint() {
  long long _x = 0, _tmp = 1;
  char _tc = getchar();
  while ((_tc < '0' || _tc > '9') && _tc != '-') _tc = getchar();
  if (_tc == '-') _tc = getchar(), _tmp = -1;
  while (_tc >= '0' && _tc <= '9') _x *= 10, _x += (_tc - '0'), _tc = getchar();
  return _x * _tmp;
}
inline long long add(long long _x, long long _y, long long _mod = mod7) {
  _x += _y;
  return _x >= _mod ? _x - _mod : _x;
}
inline long long sub(long long _x, long long _y, long long _mod = mod7) {
  _x -= _y;
  return _x < 0 ? _x + _mod : _x;
}
inline long long mul(long long _x, long long _y, long long _mod = mod7) {
  _x *= _y;
  return _x >= _mod ? _x % _mod : _x;
}
long long mypow(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 1ll;
  long long _ret = mypow(mul(_a, _a, _mod), _x >> 1, _mod);
  if (_x & 1) _ret = mul(_ret, _a, _mod);
  return _ret;
}
long long mymul(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 0ll;
  long long _ret = mymul(add(_a, _a, _mod), _x >> 1, _mod);
  if (_x & 1) _ret = add(_ret, _a, _mod);
  return _ret;
}
void sleep(double sec = 1021) {
  clock_t s = clock();
  while (clock() - s < CLOCKS_PER_SEC * sec)
    ;
}
int __ = 1, _cs;
const int mxN = 1e5;
int n, d[mxN], p[mxN], nc[mxN];
long long s;
bool chk(int x) {
  long long t = (long long)n * (n + 1) / 2;
  priority_queue<array<int, 2>, vector<array<int, 2>>, greater<array<int, 2>>>
      pq;
  for (int i = 0; i < n; ++i) {
    p[i] = i - 1;
    d[i] = i + 1;
    nc[i] = i < n - 1;
    pq.push({d[i], i});
  }
  int nn = n - 1;
  while (t > s) {
    array<int, 2> u = pq.top();
    if (nc[u[1]] >= x) {
      pq.pop();
      continue;
    }
    int cs = d[nn] - u[0] - 1;
    if (cs <= 0) return 0;
    if (t - cs >= s) {
      t -= cs;
      --nc[p[nn]];
      p[nn] = u[1];
      ++nc[p[nn]];
      d[nn] = u[0] + 1;
      pq.push({d[nn], nn});
      --nn;
      continue;
    }
    while (t > s) {
      p[nn] = p[p[nn]];
      --t;
    }
  }
  return 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> s;
  if (s > (long long)n * (n + 1) / 2 || s < 2 * n - 1) {
    cout << "No";
    return 0;
  }
  cout << "Yes\n";
  if (s == (long long)n * (n + 1) / 2) {
    for (int i = 1; i < n; ++i) cout << i << " ";
    return 0;
  }
  int lb = 2, rb = n - 1;
  while (lb < rb) {
    int mb = (lb + rb) / 2;
    if (chk(mb))
      rb = mb;
    else
      lb = mb + 1;
  }
  chk(lb);
  for (int i = 1; i < n; ++i) cout << p[i] + 1 << " ";
}
