#include #define rep(i,n)for(int i=0;i<(n);i++) using namespace std; typedef long long ll; const int MOD=998244353; const int r=3; ll ppow(ll a,ll b){ ll res=1; while(b){ if(b&1)res=(res*a)%MOD; a=(a*a)%MOD; b>>=1; } return res; } void dft(vector&f,bool inv=false){ int n=f.size(); rep(i,n){ int b=31-__builtin_clz(n); int j=0; rep(k,b){ if(i>>k&1)j|=1<<(b-k-1); } if(imultiply(vectorA,vectorB){ int m=A.size()+B.size(); int N=1;while(Nf(N); rep(i,N)f[i]=A[i]*B[i]%MOD; dft(f,1); f.erase(f.begin()+m,f.end()); return f; } int main(){ int n,q;cin>>n>>q; vector>vs; rep(i,n){ int a;scanf("%d",&a); vs.push_back({a-1,1}); } while(vs.size()>1){ vector>nx; for(int i=0;i+1