#include <bits/stdc++.h>
using namespace std;
const int N = int(3002), mod = int(1e9) + 7;
char second[N][N];
int n, m;
long long dp1[N][N], dp2[N][N], a, b, c, d;
bool used[N][N];
inline long long dp(int x, int y) {
  if (x <= 0 || y <= 0) return 0;
  if (second[x][y] == '#') return 0;
  if (x == 1 && y == 2) return 1;
  if (used[x][y]) return dp1[x][y];
  used[x][y] = 1;
  return dp1[x][y] = (dp(x - 1, y) + dp(x, y - 1)) % mod;
}
inline long long rec(int x, int y) {
  if (x <= 0 || y <= 0) return 0;
  if (second[x][y] == '#') return 0;
  if (x == 2 && y == 1) return 1;
  if (used[x][y]) return dp2[x][y];
  used[x][y] = 1;
  return dp2[x][y] = (rec(x - 1, y) + rec(x, y - 1)) % mod;
}
int main() {
  scanf("%d%d\n", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%s\n", second[i] + 1);
  }
  a = rec(n, m - 1), c = rec(n - 1, m);
  memset(used, 0, sizeof(used));
  b = dp(n - 1, m), d = dp(n, m - 1);
  a = a * b % mod;
  c = c * d % mod;
  a = (a - c) % mod;
  if (a < 0) a += mod;
  printf("%d", a);
  return 0;
}
