#include using namespace std; #include using namespace atcoder; using mint=atcoder::modint998244353; const int B=50; const int M=100000; mint sum[B+1],sum2[B+1]; // n>d_i mint floor_sums[M+1][B+1]; // d_i>n mint floor_sums2[M+1][B+1]; int main(){ cin.tie(nullptr),ios_base::sync_with_stdio(false); int n,m;cin>>n>>m; vector a(n);for(auto&e:a)cin>>e; mint X=1;for(auto&e:a)X*=m/e; for(int i=1;i<=M;i++){ for(int j=1;j<=B;j++){ floor_sums[i][j]=floor_sum(m/j,i,j,j-1); floor_sums2[i][j]=floor_sum(m/i,j,i,i-1); } } mint ans=0; fenwick_tree f(M+1); for(auto&e:a){ if(e<=B){ ans+=sum2[e]; for(int i=1;i<=B;i++){ ans+=sum[i]*floor_sums[e][i]/(m/e); } sum[e]+=X/(m/e); }else{ for(int i=1;i<=B;i++){ ans+=sum[i]*floor_sums[e][i]/(m/e); } for(int i=e;i<=m;i+=e){ ans+=f.sum(i+1,m+1)/(m/e); } for(int i=1;i<=B;i++){ sum2[i]+=X/(m/e)/(m/i)*floor_sums2[e][i]; } for(int i=e;i<=M;i+=e){ f.add(i,X/(m/e)); } } } cout<