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

ll power(ll a, int k);
ll inverse(ll a);

const int MOD = 998244353;
const int MAXN = 3e5 + 5;
ll power_of_two[MAXN];
ll inverse_power_of_two[MAXN];
ll inv;
vector<vector<bool>> board;
int n, m, w;

void preprocess() {
    inv = inverse(2);
    power_of_two[0] = 1;
    for (int i = 1; i <= MAXN; ++i) {
        power_of_two[i] = (power_of_two[i - 1] * 2) % MOD;
    }

    inverse_power_of_two[0] = 1;
    for (int i = 1; i <= MAXN; ++i) {
        inverse_power_of_two[i] = (power_of_two[i - 1] * inv) % MOD;
    }
}


ll power(ll a, int k) {
    if (k == 0) return 1;
    ll res = power(a, k / 2);
    if (k % 2) res = res * res % MOD * a % MOD;
    else       res = res * res % MOD;
    return res;
}

ll inverse (ll a) {
    return power(a, MOD - 2);
}

ll compute(int row, int col, int k) {
    ll res = 1;
    if (k > 0) {
        if (k % 2 == 0) {
            res = (power_of_two[k] - 1) * power_of_two[w - 1 - k] % MOD * inverse(3) % MOD + power_of_two[w - 2- k];
        } else
            res = (power_of_two[k + 1] - 1) * power_of_two[w - 2- k] % MOD * inverse(3) % MOD;
    } else {
        res = power_of_two[w - 2];
    }
    // cout << row << " " << col << " " << k << " " << res << "\n";
    return res;
}

void solve() {
    cin >> n >> m;
    ll ans = 0;
    board.resize(n, vector<bool>(m));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            char c; cin >> c;
            if (c == '*') board[i][j] = true;
            else          { board[i][j] = false; ++w; }
        }
    }

    int leftNum;
    for (int i = 0; i < n; ++i) {
        leftNum = 0;
        for (int j = 0; j < m - 1; ++j) {
            if (!board[i][j] && !board[i][j + 1]) {
                ans = (ans + compute(i, j, leftNum)) % MOD;
            }
            if (board[i][j]) leftNum = 0;
            else             ++leftNum;
        }
    }

    int topNum;
    for (int j = 0; j < m; ++j) {
        topNum = 0;
        for (int i = 0; i < n - 1; ++i) {
            if (!board[i][j] && !board[i + 1][j]) {
                ans = (ans + compute(i, j, topNum)) % MOD;
            }
            if (board[i][j]) topNum = 0;
            else             ++topNum;
        }
    }

    // multiply by 2^w at the end
    cout << ans << "\n";
}

int main() {
    ios::sync_with_stdio(false); cin.tie(NULL);
    int t = 1;
    preprocess();
    while(t--) solve();
}