#include <bits/stdc++.h>
using namespace std;
void _exit(string message) {
  if (message != "") cout << message << endl;
  exit(0);
}
template <typename T>
ostream &operator<<(ostream &out, const vector<T> &V) {
  if (!V.empty()) {
    out << "[";
    for (auto v : V) out << v << ", ";
    out << "\b\b]";
  } else
    out << "[]";
  return out;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  long long n, k, q = 998244353;
  cin >> n >> k;
  long long m = min(n + 1, k);
  vector<vector<int> > T(n + 1, vector<int>(m, 0));
  vector<vector<int> > PT(n + 1, vector<int>(m, 0));
  for (int j = 1; j < m; j++) PT[0][j] = T[0][j] = 2;
  T[1][1] = 2;
  for (int j = 1; j < m; j++) PT[1][j] = 2;
  for (int i = 2; i <= n; i++) PT[i][1] = T[i][1] = 2;
  for (int i = 2; i <= n; i++) {
    for (int j = 2; j < m; j++) {
      T[i][j] = (2 * T[i - 1][j]) % q;
      if (i >= j + 1) T[i][j] -= PT[i - 1 - j][j];
      if (i >= j) T[i][j] += PT[i - j][j - 1];
      if (T[i][j] < 0) T[i][j] += q;
      if (T[i][j] >= q) T[i][j] = T[i][j] % q;
      PT[i][j] = PT[i][j - 1] + T[i][j];
      if (PT[i][j] >= q) PT[i][j] = PT[i][j] % q;
    }
  }
  for (int j = 0; j < m; j++) PT[0][j] = T[0][j] = 0;
  long long ans = 0;
  for (int i = 1; i < m; i++)
    ans +=
        ((1ll * T[n][i] * PT[n][min(m - 1, (k - 1) / i)]) % q * (q + 1) / 2) %
        q;
  cout << ans % q << endl;
  return 0;
}
