#include <bits/stdc++.h>
using namespace std;
const int nax = 500 + 11;
const int kax = 250000 + 11;
const int MOD = 998244353;
int dp[nax][2];
int pre[nax][2];
vector<int> storeDp;
int get(int k, int L, int R, int j) {
  if (L > R) return 0;
  if (L <= 0) return pre[R][j];
  return ((pre[R][j] - pre[L - 1][j]) % MOD + MOD) % MOD;
}
int main() {
  int N, K, i, j, k;
  cin >> N >> K;
  storeDp.push_back(0);
  for (k = 1; k < nax; ++k) {
    dp[0][0] = 1;
    pre[0][0] = 1;
    for (i = 1; i < nax; ++i) {
      dp[i][1] = dp[i][0] = 0;
      if (i >= k) {
        dp[i][1] = get(k, i - k + 1, i - 1, 1);
        dp[i][1] += dp[i - k][0];
        dp[i][1] %= MOD;
      } else {
        dp[i][1] = ((pre[i - 1][1]) % MOD + MOD) % MOD;
      }
      dp[i][0] = get(k, i - k, i - 1, 0);
      pre[i][1] = (dp[i][1] + pre[i - 1][1]) % MOD;
      pre[i][0] = (dp[i][0] + pre[i - 1][0]) % MOD;
    }
    storeDp.push_back(dp[N][1]);
  }
  int ans = 0;
  for (i = 1; i <= N; ++i) {
    for (j = 1; j * i < K && j <= N; ++j) {
      ans += storeDp[i] * 1LL * storeDp[j] % MOD;
      ans %= MOD;
    }
  }
  cout << ans * 2LL % MOD << endl;
  return 0;
}
