#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
//#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
    int H, W;
    cin >> H >> W;
    vector<vector<int>> X(H, vector<int>(W));
    for (int i = 0; i < H; ++i) {
        for (int j = 0; j < W; ++j) {
            cin >> X[i][j];
        }
    }

    int min_val = X[0][0];
    for (int i = 0; i < H; ++i) {
        for (int j = 0; j < W; ++j) {
            if(min_val > X[i][j]){
                min_val = X[i][j];
            }
        }
    }

    int ans = 0;
    for (int i = 0; i < H; ++i) {
        for (int j = 0; j < W; ++j) {
            ans = ans + X[i][j] - min_val;
            }
    }

    cout << ans;  

    return 0;
}
#include <bits/stdc++.h> 
using namespace std;
#define     ll              long long
#define     mp              make_pair
#define     rep(i,a,b)      for( i=a;i<b;++i)
#define     repr(i,a,b)     for( i=a;i>=b;i--)
#define     up              upper_bound
#define     lb              lower_bound
// #define     t()             int test;cin>>test;while(test--)
#define     IOS             ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

#define TRACE
#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
    template <typename Arg1>
    void __f(const char* name, Arg1&& arg1){
        cout << name << " : " << arg1 << endl;
        //use cerr if u want to display at the bottom
    }
    template <typename Arg1, typename... Args>
    void __f(const char* names, Arg1&& arg1, Args&&... args){
        const char* comma = strchr(names + 1, ','); cout.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
    }
#else
#define trace(...)
#endif

ll dp[2000][2000];
ll down[2000][2000];
ll rig[2000][2000];
ll diag[2000][2000];
const ll mod = 1000000007;

int main()
{  
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    IOS;
    ll h,w;
    cin >> h >> w;
    vector<vector<char>> a(h,vector<char> (w));
    for(ll i = 0;i < h;i++){
        for(ll j = 0;j < w;j++){
            cin >> a[i][j];
        }
    }
    dp[0][0] = 1;
    for(ll i = 0;i < h;i++){
        for(ll j = 0;j < w;j++){
            if(i == 0 && j == 0){
                continue;
            }
            if(a[i][j] == '#'){
                continue;
            }
            if(j > 0){
                rig[i][j] = (rig[i][j-1] + dp[i][j-1])%mod;
            }
            if(i > 0){
                down[i][j] = (down[i-1][j] + dp[i-1][j])%mod;
            }
            if(i > 0 && j > 0){
                diag[i][j] = (diag[i-1][j-1] + dp[i-1][j-1])%mod;
            }
            dp[i][j] = (rig[i][j] + down[i][j] + diag[i][j])%mod;
        }
    }
    cout << dp[h-1][w-1] << "\n";
    return 0;
}