007 - Largest LCM
時間制限 2 秒 / メモリ制限 256 MB / 得点 100 / x 5 /
問題
長さ $N$ の数列 $A \ (A_1, A_2, \ldots, A_N)$ が与えられます。
数列 $A$ から任意の個数の要素を抽出して数列 $B$ を作ります。
ただし、数列 $B$ の各要素の最小公倍数を $L$ とするとき、$L$ が $M!$ の約数でなければなりません。
このとき、$L$ の最大値を求めてください。
ただし、答えは非常に大きくなる場合があるので $998,244,353$ で割った余りを出力してください。
制約
- $1 \leq N \leq 100,000$
- $1 \leq M \leq 1,000,000$
- $1 \leq A_i \leq 1,000,000$ $(1 \leq i \leq N)$
- 入力はすべて整数である。
入力
入力は以下の形式で標準入力から与えられる。
$N$ $M$ $A_1$ $A_2$ $\ldots$ $A_N$
出力
条件を満たす数列 $B$ が作れるならば、数列 $B$ の各要素の最小公倍数の最大値を $998,244,353$ で割った余りを出力せよ。
条件を満たす数列 $B$ が一つも作れないならば、-1
を出力せよ。
出力の末尾には改行を入れること。
入出力例
入力例1
5 5 8 9 10 11 12
出力例1
120
$B$ を $(8, 10, 12)$ とすると、$L = 120$ となり $5! = 120$ の約数となります。
$B$ にこれ以上の要素を追加すると $L$ が $M!$ の約数とならなくなるため、これが最大です。
入力例2
2 3 7 8
出力例2
-1
入力例3
15 57 24808 57312 66006 148 7701 17360 20263 90619 98663 32766 60047 96941 86016 902 53838
出力例3
868847394