E869120 defined a sequence $a$ like this:


* $a_1=a_2=1$, $a_{k+2}=a_{k+1}+a_k \ (k \ge 1)$


He also defined sequences $d_1, d_2, d_3, \dots , d_n$, as the following recurrence relation :


* $d_{1, j} = a_j$
* $d_{i, j} = \sum_{k = 1}^j d_{i - 1, k} \ (i \ge 2)$


You are given integers $n$ and $m$. Please calculate the value of $d_{n, m}$.
Since the answer can be large number, print the answer modulo $998,244,353$.
Can you solve this problem???

Input

The input is given from standard input in the following format.



> $n \quad m$

Output

* Print $d_{n, m}$ modulo $998,244,353$.



Constraints

* $1 \le n \le 200,000$
* $1 \le m \le 10^{18}$



Subtasks

Subtask 1 [ $100$ points ]


* The testcase in this subtask satisfies $1 \le n, m \le 3,000$.

Subtask 2 [ $170$ points ]


* The testcase in this subtask satisfies $1 \le m \le 200,000$.

Subtask 3 [ $230$ points ]


* The testcase in this subtask satisfies $1 \le n \le 3$.

Subtask 4 [ $420$ points ]


* The testcase in this subtask satisfies $1 \le n \le 1000$.

Subtask 5 [ $480$ points ]


* There are no additional constraints.

Output

* Print $d_{n, m}$ modulo $998,244,353$.



Constraints

* $1 \le n \le 200,000$
* $1 \le m \le 10^{18}$



Subtasks

Subtask 1 [ $100$ points ]


* The testcase in this subtask satisfies $1 \le n, m \le 3,000$.

Subtask 2 [ $170$ points ]


* The testcase in this subtask satisfies $1 \le m \le 200,000$.

Subtask 3 [ $230$ points ]


* The testcase in this subtask satisfies $1 \le n \le 3$.

Subtask 4 [ $420$ points ]


* The testcase in this subtask satisfies $1 \le n \le 1000$.

Subtask 5 [ $480$ points ]


* There are no additional constraints.

Input

The input is given from standard input in the following format.



> $n \quad m$

Examples

Input

4 7


Output

176


Input

12 20


Output

174174144


Input

16 30


Output

102292850
#include <cstdio>
#include <cstring>
using namespace std;
#define Mod 998244353
#define N 200050
int n,i,f[2*N],c[N];
long long m;
struct matrix{
	int a[2][2];
	matrix operator * (const matrix &jb)const{
		matrix cll;memset(cll.a,0,sizeof(cll.a));
		for (int ii=0;ii<2;ii++)
		for (int jj=0;jj<2;jj++)
		for (int kk=0;kk<2;kk++) cll.a[ii][jj]=(cll.a[ii][jj]+1LL*a[ii][kk]*jb.a[kk][jj] % Mod) % Mod;
		return cll;
	}
};
int qmi(int di,int zhi)
{
	int ret=1,x=di;
	while (zhi){
		if (zhi & 1) ret=1LL*ret*x % Mod;x=1LL*x*x % Mod;zhi>>=1;
	}return ret;
}
int main()
{
	scanf("%d%lld",&n,&m);
	n--;matrix gh;gh.a[1][0]=gh.a[1][1]=gh.a[0][0]=0;gh.a[0][1]=1;
	long long zhi=2*n+m-1;matrix x;x.a[0][0]=0;x.a[0][1]=x.a[1][0]=x.a[1][1]=1;
	while (zhi){
		if (zhi & 1) gh=gh*x;x=x*x;zhi>>=1;
	}int ans=gh.a[0][1];f[1]=1;f[2]=1;
	for (i=3;i<=2*n;i++) f[i]=(f[i-1]+f[i-2]) % Mod;
	c[0]=1;for (i=1;i<=n;i++) c[i]=(1LL*c[i-1]*((m-1+i) % Mod) % Mod)*qmi(i,Mod-2) % Mod;
	for (i=1;i<=n;i++) ans=(ans-1LL*f[2*i]*c[n-i] % Mod) % Mod;
	printf("%d\n",(ans+Mod) % Mod);
	return 0;
}