//######################################## LET'S DO THIS #########################################################//
/* 
Name: Prathamesh S
Motto: To Never Give Up
Linkedin: https://www.linkedin.com/in/prathamesh-shendarkar-1a3411172/
*/

//####################################### Start of Macros ########################################################//
#include <bits/stdc++.h>
//######################################### Containers ###########################################################//
#define all(v) v.begin(),v.end()
#define mem(n,m) memset(n,m,sizeof(n))
#define pii pair<int,int>
#define pll pair<long long,long long>
#define sii set<int>
#define sll set<long long>
#define vii vector<int> 
#define vll vector<long long>
#define mll map<long long, long long>
#define ff first
#define ss second
#define pb push_back
#define pf push_front
#define ins insert
#define mp make_pair
#define len(s) s.length()
//########################################### Loops ##############################################################//
#define loopa(i,a,b) for(i=a;i<=b;i++)
#define loop(i,n) for(i=0;i<n;i++)
#define pool(i,n) for(i=n-1;i>=0;i--)
#define poop(i,a,b) for(i=a;i>=b;i--)
//########################################## Debugging ###########################################################//
#define on cout<<endl
#define o2(a,b) cout<<a<<" "<<b
#define debug(a) cout<<a<<"\n";
#define os cout<<" "
//########################################## Ends/Bounds #########################################################//
#define lob lower_bound
#define upb upper_bound
#define ret return 0
//########################################## Containers ##########################################################//
#define present(s,x) (s.find(x) != s.end()) 
#define cpresent(s,x) (find(all(s),x) != s.end()) 
#define ford(container, it) for(__typeof(container.begin()) it = container.begin(); it != container.end(); it++) 
#define fors(container, it, a, b) for(__typeof(container.begin()) it = a; it != b; it++) 
//############################################# Size #############################################################//
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define mod 1000000007
#define EPSILON 1e-9
#define PI 3.14159265358979323846
#define inf 999999999999999999
#define siz 100001
#define SIZ 1000001
#define SIZE 200001
//############################################ typedefs #########################################################//
typedef long long  ll;
typedef long double ldo;
typedef double db;
//########################################## End of Macros ######################################################//
using namespace std;

//######################################### Start of Program ####################################################//
int main(){
	fastio
	
	string st;
	ll n, m;
	cin >> n >> m;
	vector<vector<ll>> v(n, vector<ll>(m));
	vector<vector<ll>> dp(n, vector<ll>(m, 0));
	
	for(ll i = 0;i<n;i++){
		cin >> st;
		for(ll j = 0;j<m;j++){
			v[i][j] = st[j];
		}
	}
	if(v[0][0] == '#'){
		return 0;
	}
	
	for(ll i = 1;i<m;i++){
		if(v[0][i] != '#'){
			dp[0][i] = 1;
		}else {
			break;
		}
	}
	
	for(ll i = 1;i<n;i++){
		if(v[i][0] != '#'){
			dp[i][0] = 1;
		}else {
			break;
		}
	}
	
	for(ll i = 1;i<n;i++){
		for(ll j = 1;j < m;j++){
			if(v[i][j - 1] != '#' && v[i - 1][j] != '#' && v[i][j] != '#'){
				dp[i][j] = (dp[i - 1][j]%mod + dp[i][j - 1]%mod)%mod;
			}else if(v[i - 1][j] == '#' && v[i][j - 1] != '#' && v[i][j] != '#'){
				dp[i][j] = (dp[i][j - 1]%mod);
			}else if(v[i - 1][j] != '#' && v[i][j - 1] == '#' && v[i][j] != '#'){
				dp[i][j] = (dp[i - 1][j]%mod);
			}
		}
	}
	
	// Debugging
	//for(ll i = 0;i<n;i++){
	//	for(ll j = 0;j < m;j++){
		//	cout << dp[i][j] << " ";
		//}
		//cout << "\n";
	//}
	
	cout << dp[n - 1][m - 1]%mod << "\n";
}





/*
2
5
1 2 3 4 5
4
1 1 -1 -1
*/
//######################################### End of Program ######################################################//

Measured memory_bytes: 16000