//package com.company;

import java.io.*;
import java.util.*;

public class Main {
    static long TIME_START, TIME_END;
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        //        Scanner sc = new Scanner(new FileInputStream("Test.in"));
        PrintWriter pw = new PrintWriter(System.out);
        //        PrintWriter pw = new PrintWriter(new FileOutputStream("Test.out"));
        //        PrintWriter pw = new PrintWriter(new FileOutputStream("Test.in"));

        Runtime runtime = Runtime.getRuntime();
        long usedMemoryBefore = runtime.totalMemory() - runtime.freeMemory();
        TIME_START = System.currentTimeMillis();
        Task t = new Task();
        t.solve(sc, pw);
        TIME_END = System.currentTimeMillis();
        long usedMemoryAfter = runtime.totalMemory() - runtime.freeMemory();
        pw.close();
        System.out.println("Memory increased:" + (usedMemoryAfter-usedMemoryBefore) / 1000000 );
        System.out.println("Time used: " + (TIME_END - TIME_START) + ".");
    }

    public static class Task {

        public long[][] dp;
        public long[][] subdp;
        public long[] sef;

        public long power(long a, int b) {
            if (b == 0) return 1;
            if (b % 2 == 0) return power(a * a % mod, b >> 1);
            return a * power(a * a % mod, b >> 1) % mod;
        }

        public void calc(int n) {
            dp = new long[n + 1][n + 1];
            subdp = new long[n + 1][n + 1];
            sef = new long[n + 1];
            long t = 1;
            for (int i = 0; i < n + 1; i++) {
                sef[i] = t;
                t *= 2; t %= mod;
            }
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= n; j++) {
                    search(i, j);
                }
            }
            subdp[n][1] = dp[n][1];
            for (int i = 1; i < n; i++) {
                subdp[n][i + 1] = dp[n][i + 1] - dp[n][i] + mod;
                if (subdp[n][i + 1] >= mod) {
                    subdp[n][i + 1] -= mod;
                }
            }
        }

        public long search(int n, int k) {
            if (dp[n][k] != 0) {
                return dp[n][k];
            }
            if (k >= n) {
                return dp[n][k] = sef[n];
            }
            long s = 0;
            for (int i = 1; i <= k; i++) {
                s += search(n - i, k);
                if (s >= mod) s -= mod;
            }
            return dp[n][k] = s;
        }

        public void solve(Scanner sc, PrintWriter pw) throws IOException {
            int n = sc.nextInt();
            int k = sc.nextInt();
            calc(n);
            long sum = 0;
            long inv2 = power(2, mod - 2);
            for (int i = 1; i <= n; i++) {
                int otherlen = k % i == 0 ? k / i - 1 : k / i;
                if (otherlen > n) otherlen = n;
                sum += subdp[n][i] * dp[n][otherlen] % mod * inv2 % mod;
                if (sum >= mod) sum -= mod;
            }
            pw.println(sum);
        }

        int mod = 998244353;

    }

    static class Scanner {
        StringTokenizer st;
        BufferedReader br;

        public Scanner(InputStream s){  br = new BufferedReader(new InputStreamReader(s));}

        public Scanner(FileReader s) throws FileNotFoundException {br = new BufferedReader(s);}

        public String next() throws IOException
        {
            while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        public int nextInt() throws IOException {return Integer.parseInt(next());}

        public long nextLong() throws IOException {return Long.parseLong(next());}

        public String nextLine() throws IOException {return br.readLine();}

        public double nextDouble() throws IOException { return Double.parseDouble(next()); }

        public boolean ready() throws IOException {return br.ready();}
    }
}