//#define MULTICASES
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,a,b) for(i=(a);i<=(b);++i)
#define per(i,a,b) for(i=(a);i>=(b);--i)
#define REP(i,a,b) for(i=(a);i< (b);++i)
#define PER(i,a,b) for(i=(a);i> (b);--i)
#define ERR(...) fprintf(stderr,__VA_ARGS__)
inline void ac();
int main(){
#ifdef MULTICASES
	int t;scanf("%d",&t);while(t--)ac();
#else
	ac();
#endif
	return 0;
}
const int MAXN=5005;
const ll p=998244353ll;
ll C[MAXN][MAXN],Z[MAXN],D[MAXN];
inline void ac(){
	int n,m,i,j,a,b;ll t;
	scanf("%d%d",&n,&m);
	if(m&1){puts("0");return;}
	m>>=1;
	rep(i,0,n){
		C[i][0]=1ll;
		rep(j,1,i)C[i][j]=(C[i-1][j]+C[i-1][j-1])%p;
	}
	rep(i,0,n>>1)Z[i]=C[n][i<<1];
	D[0]=1ll;
	for(j=1;j!=4096;j<<=1){
		per(i,m,j){
			a=0;b=i;t=D[i];
			for(++a,b-=j;b>=0;++a,b-=j)t=(t+Z[a]*D[b])%p;
			D[i]=t;
		}
		//rep(i,0,m)ERR("%lld ",D[i]);ERR("\n");
	}
	printf("%lld\n",D[m]);
}
/*
0. int overflow, array bounds
1. special cases (n=1? n=0?)
2. do smth instead of nothing and stay organized
3. WRITE STUFF DOWN
4. DON'T GET STUCK ON ONE APPROACH
5. STAY CALM AND DON'T GET EXPLODED
*/

#include<bits/stdc++.h>
using namespace std;
# define ll long long
# define read read1<ll>()
# define Type template<typename T>
Type T read1(){
	T t=0;
	char k;
	bool vis=0;
	do (k=getchar())=='-'&&(vis=1);while('0'>k||k>'9');
	while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
	return vis?-t:t;
}
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
# define mod 998244353
int n,m,fac[5005],inv[5005];
void init(const int N=5000){
	fac[0]=inv[0]=inv[1]=fac[1]=1;
	for(int i=2;i<=N;++i)fac[i]=1ll*i*fac[i-1]%mod,inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
	for(int i=2;i<=N;++i)inv[i]=1ll*inv[i-1]*inv[i]%mod;
}
ll C(int n,int m){return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;}
int f[5005],g[5005];
int main(){init();
	n=read,m=read;f[0]=1;
	for(int i=0;m>>i;++i){
		memset(g,0,sizeof(g));
		for(int k=0;k<=m;++k)
			for(int j=0;k+(j<<i)<=m&&j<=n;j+=2)
				g[k+(j<<i)]=(g[k+(j<<i)]+C(n,j)*f[k])%mod;
		memcpy(f,g,sizeof(f));
	}printf("%d",f[m]);
	return 0;
}
