#include <bits/stdc++.h>
using namespace std;
class Segtree {
 public:
  long long di[2010], surf, sum;
  void init() {
    for (int i = 0; i < 2010; i++) di[i] = 0;
    surf = 0;
    sum = 0;
  }
  void upd(long long l, long long r, long long x) {
    di[l] = (di[l] + x) % 1000000007;
    di[r + 1] = (di[r + 1] + -x) % 1000000007;
  }
  long long qry(long long i) {
    while (surf <= i) {
      sum = (sum + di[surf]) % 1000000007;
      surf++;
    }
    return sum;
  }
};
Segtree segx[2010], segy[2010];
string s[2010];
long long ri[2010][2010], dw[2010][2010];
int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);
  long long h, w;
  cin >> h >> w;
  for (int i = 0; i < h; i++) cin >> s[i];
  if (h == 1 && w == 1) {
    cout << 1 << endl;
    return 0;
  }
  for (int i = 0; i < h; i++) {
    ri[i][w - 1] = 0;
    for (int j = w - 2; j >= 0; j--) {
      ri[i][j] = ri[i][j + 1] + (s[i][j + 1] == '.');
    }
  }
  for (int j = 0; j < w; j++) {
    dw[h - 1][j] = 0;
    for (int i = h - 2; i >= 0; i--) {
      dw[i][j] = dw[i + 1][j] + (s[i + 1][j] == '.');
    }
  }
  for (int i = 0; i < 2010; i++) {
    segx[i].init();
    segy[i].init();
  }
  segx[0].upd(0, 0, 1);
  segy[0].upd(0, 0, 1);
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++) {
      long long vx = segy[j].qry(i);
      segx[i].upd(j + 1, j + ri[i][j], vx);
      long long vy = segx[i].qry(j);
      segy[j].upd(i + 1, i + dw[i][j], vy);
    }
  long long res = segx[h - 1].qry(w - 1) + segy[w - 1].qry(h - 1);
  res %= 1000000007;
  if (res < 0) res += 1000000007;
  cout << res << endl;
}
