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

template<size_t N>
size_t rankF2(vector<bitset<N>>& a, long n, long m){ // calculate rank of matrix in F_2
    size_t now(0), ret(0);
    while(now < m && ret < n){
        size_t i(ret);
        for(; i < n; ++i)if(a[i][now])break;
        if(i == n){
            ++now;
            continue;
        }
        size_t j(i + 1);
        for(; j < n; ++j)if(a[j][now])a[j] ^= a[i];
        swap(a[ret], a[i]);
        ++ret;
    }
    return ret;
}

int main(){
    constexpr long m = 998244353;
    auto modpow = [&m](long n){
        long r = 1, p = 2;
        while(n){
            if(n & 1){
                r *= p;
                r %= m;
            }
            p *= p;
            p %= m;
            n >>= 1;
        }
        return r;
    };

    long N, M;
    cin >> N >> M;
    bool f = false;
    if(N > M && (f = true))swap(N, M);

    vector<bitset<300>> a(N);
    if(f)for(int i = 0; i < M; ++i)for(int j = 0, k; j < N; ++j){
        scanf("%d", &k);
        a[j][i] = k > 0;
    }
    else for(auto& i : a)for(int j = 0, k; j < M; ++j){
        scanf("%d", &k);
        i[j] = k > 0;
    }

    auto r = rankF2(a, N, M);
    cout << modpow(N + M - r - 1) * (modpow(r) - 1) % m << endl;
}
