#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using uint = unsigned;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;
template <typename T>
using vt = std::vector<T>;
template <typename T>
using vvt = vt<vt<T>>;
template <typename T>
using vvvt = vt<vvt<T>>;
using vi = vt<int>;
using vvi = vvt<int>;
using vvvi = vvvt<int>;
using vl = vt<ll>;
using vvl = vvt<ll>;
using vvvl = vvvt<ll>;
using vb = vt<bool>;
using vpii = vt<pii>;
static inline void Solve();
int main(int argc, char* argv[]) {
  {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
  };
  ;
  Solve();
  ;
  return 0;
}
constexpr ll MOD = 998244353;
const int MAXN = 500;
ll dp1[2][MAXN + 1][MAXN + 1]{};
ll dp2[2][MAXN + 1]{};
void Solve() {
  int n, k;
  cin >> n >> k;
  int idp = 0, idpn = 1;
  dp1[idp][1][1] = 2;
  for (int k = 2; k <= n; k++) {
    memset(dp1[idpn], 0, sizeof(dp1[idpn]));
    for (int i = 1; i <= k; i++) {
      for (int j = 1; j <= i; j++) {
        dp1[idpn][i][j] = dp1[idp][i][j - 1];
      }
      for (int j = 1; j <= i; j++) {
        dp1[idpn][i][1] += dp1[idp][i][j];
      }
      dp1[idpn][i][i] += dp1[idp][i - 1][i - 1];
      dp1[idpn][i][1] %= MOD;
      dp1[idpn][i][i] %= MOD;
    }
    swap(idp, idpn);
  }
  ll ans = 0;
  for (int i = 1; i <= min(n, k - 1); i++) {
    const int ml = (k - 1) / i;
    int idp2 = 0, idpn2 = 1;
    memset(dp2[idp2], 0, sizeof(dp2[idp2]));
    for (int k = 1; k <= i; k++)
      dp2[idp2][1] = (dp2[idp2][1] + dp1[idp][i][k]) % MOD;
    for (int k = 2; k <= n; k++) {
      for (int j = 1; j <= ml; j++) {
        dp2[idpn2][j] = dp2[idp2][j - 1];
      }
      for (int j = 1; j <= ml; j++) {
        dp2[idpn2][1] += dp2[idp2][j];
      }
      dp2[idpn2][1] %= MOD;
      swap(idp2, idpn2);
    }
    for (int j = 1; j <= ml; j++) ans = (ans + dp2[idp2][j]) % MOD;
  }
  cout << ans << endl;
}
