#include <bits/stdc++.h>
using namespace std;
const int maxn = 100001;
long long cal_min(int d, int t, int k, int n);
int cur[maxn];
int sum[maxn];
int p[maxn];
int n;
long long s;
int main() {
  scanf("%d%lld", &n, &s);
  if (cal_min(1, 1, n, n) > s) {
    printf("No");
    return 0;
  }
  if ((long long)n * (n + 1) / 2 < s) {
    printf("No");
    return 0;
  }
  int ans = 1;
  while (cal_min(1, 1, ans, n) > s) ans++;
  if (ans == 1) {
    printf("yes\n");
    for (int i = 1; i < n; i++) {
      printf("%d ", i);
    }
    return 0;
  }
  int tn = n;
  cur[1] = 1;
  n--;
  s--;
  for (int i = 2; n; i++) {
    int l = 1;
    int r = n;
    int mid = (l + r) / 2;
    while (r > l) {
      if (cal_min(i, mid, ans, n) > s)
        l = mid + 1;
      else
        r = mid;
      mid = (l + r) / 2;
    }
    cur[i] = mid;
    n -= mid;
    s -= (long long)i * mid;
  }
  for (int i = 1; i <= tn; i++) {
    sum[i] = sum[i - 1] + cur[i];
  }
  for (int i = 1; i <= tn; i++) {
    int pos = 0;
    for (int j = 1; j <= cur[i]; j++) {
      int cnt = 0;
      while (pos < cur[i + 1] && cnt < ans) {
        pos++;
        cnt++;
        p[sum[i] + pos] = sum[i - 1] + j;
      }
    }
  }
  printf("yes\n");
  for (int i = 2; i <= tn; i++) {
    printf("%d ", p[i]);
  }
  return 0;
}
long long cal_min(int d, int t, int k, int n) {
  long long sum = (long long)t * d;
  n -= t;
  int last = t;
  d++;
  while (n) {
    int cur = min((long long)n, (long long)k * last);
    sum += (long long)cur * d;
    n -= cur;
    last = cur;
    d++;
  }
  return sum;
}
