#include <bits/stdc++.h>
#define T int t;cin>>t;while(t--)
#define fast ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
#define ll long long
#define endl '\n'
using namespace std;
const ll mod = 1e9 + 7;
const ll N = 1e3 + 3;
ll n, m;
char grid[N][N];
ll dp[N][N];
ll solve(ll i, ll j) {
if (i == (n - 1) && j == (m - 1)) {
return 1;
}
if (dp[i][j] >= 1) {
return (dp[i][j]) % mod;
}
int o1 = 0, o2 = 0;
if (grid[i + 1][j] != '#' && (i + 1) < n) o1 = solve(i + 1, j);
if (grid[i][j + 1] != '#' && (j + 1) < m) o2 = solve(i, j + 1);
return dp[i][j] = (o1 + o2) % mod;
}
void Abady() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> grid[i][j];
}
}
cout << (solve(0, 0)) % mod;
}
int main() {
fast;
Abady();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgVCBpbnQgdDtjaW4+PnQ7d2hpbGUodC0tKQojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7Y2luLnRpZShudWxscHRyKTtjb3V0LnRpZShudWxscHRyKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVuZGwgJ1xuJwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBsbCBtb2QgPSAxZTkgKyA3Owpjb25zdCBsbCBOID0gMWUzICsgMzsKbGwgbiwgbTsKY2hhciBncmlkW05dW05dOwpsbCBkcFtOXVtOXTsKCmxsIHNvbHZlKGxsIGksIGxsIGopIHsKICAgIGlmIChpID09IChuIC0gMSkgJiYgaiA9PSAobSAtIDEpKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBpZiAoZHBbaV1bal0gPj0gMSkgewogICAgICAgIHJldHVybiAoZHBbaV1bal0pICUgbW9kOwogICAgfQogICAgaW50IG8xID0gMCwgbzIgPSAwOwogICAgaWYgKGdyaWRbaSArIDFdW2pdICE9ICcjJyAmJiAoaSArIDEpIDwgbikgbzEgPSBzb2x2ZShpICsgMSwgaik7CiAgICBpZiAoZ3JpZFtpXVtqICsgMV0gIT0gJyMnICYmIChqICsgMSkgPCBtKSBvMiA9IHNvbHZlKGksIGogKyAxKTsKICAgIHJldHVybiBkcFtpXVtqXSA9IChvMSArIG8yKSAlIG1vZDsKfQoKdm9pZCBBYmFkeSgpIHsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgICAgIGNpbiA+PiBncmlkW2ldW2pdOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgKHNvbHZlKDAsIDApKSAlIG1vZDsKfQoKaW50IG1haW4oKSB7CiAgICBmYXN0OwogICAgQWJhZHkoKTsKfQo=