#include <bits/stdc++.h>
using namespace std;

const int N = 50000 + 9;
const int P = 998244353;

int d[N][25];

long long fact[25], inv_fact[25];

long long inv(long long x) {
    long long r = 1, n = P - 2;
    for (x %= P; n; n >>= 1) {
        if (n & 1) r = r * x % P;
        x = x * x % P;
    }
    return r;
}

long long C(int n, int m) {
    if (n < m) return 0;
    return fact[n] * inv_fact[m] % P * inv_fact[n - m] % P;
}

void solve() {
    int n, m;
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            scanf("%d", &d[j][i]);
        }
    }
    long long ans = 0;
    for (int j = 1; j <= m; ++j) {
        int cnt[25];
        memset(cnt, 0, sizeof(cnt));
        for (int i = 1; i <= n; ++i) {
            ++cnt[max(0, n - d[j][i] + 1)];
        }
        long long dp[25];
        memset(dp, 0, sizeof(dp));
        dp[0] = 1; dp[1] = cnt[0];
        for (int i = 2; i <= n; ++i) {
            cnt[i - 1] += cnt[i - 2];
            dp[i] = (dp[i - 1] * (cnt[i - 1] - (i - 1))) % P;
        }
        long long tmp = 0;
        for (int i = 1; i <= n; ++i) {
            int lmt = n - d[j][i] + 1;
            for (int k = 1; k <= lmt; ++k) {
                tmp = (tmp + dp[k - 1] * fact[n - k]) % P;
            }
        }
        ans = (ans + tmp) % P;
    }
    ans = ans * inv(fact[n]) % P;
    printf("%lld\n", ans);
}

int main() {
    fact[0] = inv_fact[0] = 1;
    for (int i = 1; i < 25; ++i) {
        fact[i] = fact[i - 1] * i % P;
        inv_fact[i] = inv(fact[i]);
    }
    int T = 1;
    while (T--) solve();
    return 0;
}