#include <bits/stdc++.h>
using namespace std;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 2005;
const int MOD = 1e9 + 7;
bool a[N][N];
int maxDown[N][N], maxRight[N][N];
int dp[N][N][2];
int sum[N][N][2];
void add(int &A, int B) {
  A = ((A + B) % MOD + MOD) % MOD;
  ;
}
int main() {
  srand(time(NULL));
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      char c;
      cin >> c;
      a[i][j] = (c == '.');
    }
  }
  for (int i = n; i > 0; --i)
    for (int j = m; j > 0; --j) {
      maxDown[i][j] = maxDown[i + 1][j] + a[i + 1][j];
      maxRight[i][j] = maxRight[i][j + 1] + a[i][j + 1];
    }
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j) {
      if (i + j == 2) {
        dp[i][j][0] = dp[i][j][1] = 1;
        add(sum[i][j + 1][1], dp[i][j][0]);
        add(sum[i][j + maxRight[i][j] + 1][1], -dp[i][j][0]);
        add(sum[i + 1][j][0], dp[i][j][1]);
        add(sum[i + maxDown[i][j] + 1][j][0], -dp[i][j][1]);
        continue;
      }
      add(sum[i][j][0], sum[i - 1][j][0]);
      add(sum[i][j][1], sum[i][j - 1][1]);
      add(dp[i][j][0], sum[i][j][0]);
      add(dp[i][j][1], sum[i][j][1]);
      add(sum[i][j + 1][1], dp[i][j][0]);
      add(sum[i][j + maxRight[i][j] + 1][1], -dp[i][j][0]);
      add(sum[i + 1][j][0], dp[i][j][1]);
      add(sum[i + maxDown[i][j] + 1][j][0], -dp[i][j][1]);
    }
  if (n == m && n == 1) {
    cout << a[1][1] << '\n';
    exit(0);
  }
  cout << (dp[n][m][0] + dp[n][m][1]) % MOD << '\n';
}
