#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <queue>

using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
#define PB push_back
#define fi first
#define se second
#define MP make_pair
const int P = 998244353;
const int V = 5100;
const int N = 5000;
const int M = 15;
int C[V][V];
int dp[M + 1][V];
int pt[30], n, m;
int main() {
    pt[0] = 1;
    for (int i = 1; i < 20; ++i) pt[i] = pt[i - 1] * 2;
    for (int i = 0; i <= N; ++i) {
        C[i][0] = C[i][i] = 1;
        for (int j = 1; j < i; ++j) {
            C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % P;
        }
    }
    while (~scanf("%d%d", &n, &m)) {
        memset(dp, 0, sizeof(dp));
        dp[M][m] = 1;
        for (int i = M; i > 0; --i) {
            for (int j = 0; j <= m; ++j) {
                if (dp[i][j] == 0) continue;
                for (int k = 0; k * pt[i - 1] <= j && k <= n; k += 2) {
                    dp[i - 1][j - k * pt[i - 1]] += (LL) dp[i][j] * C[n][k] % P;
                    dp[i - 1][j - k * pt[i - 1]] %= P;
                }
            }
        }
        printf("%d\n", dp[0][0]);
    }
    return 0;
}

/*
5 20
10 5
3141 2718
*/

#include<iostream>

using namespace std;

typedef long long ll;

const int MOD = 998244353;
ll dp[5010];
ll f[5010];
int n , m;

ll Q_power(ll a,ll b){
    ll res = 1;
    while(b){
        if(b & 1) res = res * a % MOD;
        b >>= 1;
        a = a * a % MOD;
    }
    return res;
}

ll X_1(ll a){ return Q_power(a , MOD - 2);}

void init(){
    f[0] = 1;
    for(int i = 1 ; i <= 5000 ; i ++){
        f[i] = f[i - 1] * (n - i + 1) % MOD * X_1(i) % MOD;
    }
}

int main(){
    cin >> n >> m;
    if(m & 1){
        puts("0");
        return 0;
    }
    init();
    dp[0] = 1;
    for(int i = 2 ; i <= m ; i += 2){
        for(int j = 0 ; 2 * j <= i ; j ++){
            dp[i] = (dp[i] + f[2 * j] * dp[(i - 2 * j) / 2] % MOD) % MOD;
        }
    }
    cout << dp[m] << endl;
    return 0;
}
