```go
package main
import (
"bufio"
"fmt"
"os"
)
const MOD = int64(1e9 + 7)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
scanner.Scan()
n := atoi(scanner.Text())
scanner.Scan()
m := atoi(scanner.Text())
grid := make([]string, n)
for i := 0; i < n; i++ {
scanner.Scan()
grid[i] = scanner.Text()
}
if n == 1 && m == 1 {
fmt.Println(1)
return
}
rowRocks := make([]int, n)
colRocks := make([]int, m)
for i := 0; i < n; i++ {
for j := 0; j < m; j++ {
if grid[i][j] == 'R' {
rowRocks[i]++
colRocks[j]++
}
}
}
dp := make([][]int64, n)
for i := 0; i < n; i++ {
dp[i] = make([]int64, m)
}
dp[0][0] = 1
for i := 0; i < n; i++ {
for j := 0; j < m; j++ {
if i == 0 && j == 0 {
continue
}
var ways int64 = 0
if i > 0 && i <= n-colRocks[j] {
ways += dp[i-1][j]
}
if j > 0 && j <= m-rowRocks[i] {
ways += dp[i][j-1]
}
dp[i][j] = ways % MOD
}
}
fmt.Println(dp[n-1][m-1] % MOD)
}
func atoi(s string) int {
v := 0
for _, ch := range s {
v = v*10 + int(ch-'0')
}
return v
}
```