#include <bits/stdc++.h>
using namespace std;
const long long mxN = 140000;
vector<long long> adj[mxN];
long long c[2];
long long m;
long long its;
long long dfs(long long v, long long pty) {
  ++its;
  long long sz = 1;
  for (long long i : adj[v]) {
    sz += dfs(i, pty);
  }
  c[pty] += sz;
  return sz;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long n, s;
  cin >> n >> s;
  if (s > n * (n + 1) / 2 || s < 2 * n - 1) {
    cout << "No\n";
    return 0;
  }
  if (s == n * (n + 1) / 2) {
    cout << "Yes\n";
    for (long long i = 1; i < n; ++i) {
      cout << i << " ";
    }
    cout << "\n";
    return 0;
  }
  long long l = 2, r = n - 1;
  while (l < r) {
    long long m = l + (r - l) / 2;
    its = 0;
    for (long long i = 1; i <= n; ++i) {
      for (long long j = i * m - (m - 2); j <= i * m + 1; ++j) {
        ++its;
        if (j > n) break;
        assert(j > i);
        adj[i].push_back(j);
      }
    }
    c[0] = c[1] = 0;
    dfs(1, 0);
    for (long long i = 1; i <= n; ++i) {
      adj[i].clear();
    }
    for (long long i = 1; i <= n; ++i) {
      for (long long j = i * (m - 1) - (m - 3); j <= i * (m - 1) + 1; ++j) {
        ++its;
        if (j > n) break;
        assert(j > i);
        adj[i].push_back(j);
      }
    }
    dfs(1, 1);
    for (long long i = 1; i <= n; ++i) {
      adj[i].clear();
    }
    if (s >= c[0] && s < c[1]) {
      l = m;
      break;
    }
    if (s < c[0]) {
      l = m + 1;
    } else {
      r = m - 1;
    }
  }
  cout << "Yes\n";
  long long k = l;
  long long amt[n + 1];
  fill(amt, amt + n + 1, 0);
  long long tot = n, used = 1;
  amt[0] = 1;
  for (long long i = 1; i <= n; ++i) {
    l = 1, r = min(k * amt[i - 1], n - used);
    while (l < r) {
      long long m = l + (r - l + 1) / 2;
      long long left = (n - used) - m;
      long long cur = tot + m * i;
      if (cur + left * (left + 1) / 2 + left * i >= s) {
        l = m;
      } else {
        r = m - 1;
      }
    }
    amt[i] = l;
    used += l;
    tot += i * l;
    if (tot == s || used == n) break;
  }
  vector<long long> prev;
  prev.push_back(1);
  long long ans = n;
  long long next = 2;
  for (long long i = 1; i <= n; ++i) {
    if (amt[i] == 0) break;
    long long ind = 0;
    vector<long long> cur;
    for (long long j = 1; j <= amt[i]; ++j) {
      cout << prev[ind++] << " ";
      ind %= prev.size();
      cur.push_back(next++);
    }
    prev.clear();
    for (long long j : cur) {
      prev.push_back(j);
    }
  }
}
