#include <bits/stdc++.h>
#pragma GCC optimize(3, "Ofast", "inline")
using namespace std;
bool Finish_read;
template <class T>
inline void read(T &x) {
  Finish_read = 0;
  x = 0;
  int f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    if (ch == EOF) return;
    ch = getchar();
  }
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  x *= f;
  Finish_read = 1;
}
template <class T>
inline void print(T x) {
  if (x / 10 != 0) print(x / 10);
  putchar(x % 10 + '0');
}
template <class T>
inline void writeln(T x) {
  if (x < 0) putchar('-');
  x = abs(x);
  print(x);
  putchar('\n');
}
template <class T>
inline void write(T x) {
  if (x < 0) putchar('-');
  x = abs(x);
  print(x);
}
const int mod = 998244353, maxn = 505, v2 = (mod + 1) >> 1;
int f[2][maxn][maxn], n, o;
inline void calc() {
  int ans = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (i * j < o) {
        int l = 0, r = 0;
        for (int k = 1; k <= n; k++) {
          l += f[n & 1][i][k];
          if (l >= mod) l -= mod;
          r += f[n & 1][j][k];
          if (r >= mod) r -= mod;
        }
        ans += 1ll * l * r % mod * v2 % mod;
        if (ans >= mod) ans -= mod;
      }
  printf("%d\n", ans);
}
inline void pre() {
  f[1][1][1] = 2;
  for (int i = 2; i <= n; i++) {
    int p = i & 1, q = p ^ 1;
    memset(f[p], 0, sizeof f[0]);
    for (int j = 1; j <= i; j++)
      for (int k = 1; k <= i; k++) {
        f[p][max(j, k + 1)][k + 1] += f[q][j][k];
        if (f[p][max(j, k + 1)][k + 1] >= mod)
          f[p][max(j, k + 1)][k + 1] -= mod;
        f[p][j][1] += f[q][j][k];
        if (f[p][j][1] >= mod) f[p][j][1] -= mod;
      }
  }
}
int main() {
  read(n), read(o);
  pre();
  calc();
}
