#include <bits/stdc++.h>
#define int long long
int pref[3001][3001];
bool dango[3001][3001][2];
signed main() {
int n,m;
std::cin >> n >> m;
std::vector<std::string> grid;
for(int i=0;i<n;i++){
std::string s;
std::cin >> s;
grid.push_back(s);
}
int best = 0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(j>=2&&grid[i][j]=='W'&&grid[i][j-1]=='G'&&grid[i][j-2]=='R')dango[i][j][0]=true;
if(i>=2&&grid[i][j]=='W'&&grid[i-1][j]=='G'&&grid[i-2][j]=='R')dango[i][j][1]=true;
int v11=0,v12=0,v22=0,v21=0,v33=0,v31=0,v32=0;
if(i>2)//std::cout<<"HELLOWORLD";
v11 = pref[i-3][j];
if(i>0)
v12 = pref[i-1][j];
if(j>2)
v22 = pref[i][j-3];
if(j>0)
v21 = pref[i][j-1];
if(i>2&&j>2)
v33 = pref[i-3][j-3];
if(i>0&&j>2)
v31 = pref[i-1][j-3];
if(i>2&&j>0)
v32 = pref[i-3][j-1];
pref[i][j]=std::max(v11+v22-v33,std::max(v12+v22-v31,v11+v21-v32));
if(i>0)
pref[i][j]=std::max(pref[i-1][j],pref[i][j]);
if(j>0)
pref[i][j]=std::max(pref[i][j-1],pref[i][j]);
if(dango[i][j][1]){
int v1=0;
int v2=0;
int v3=0;
if(i>2)v1=pref[i-3][j];
if(j>0)v2=pref[i][j-1];
if(j>0&&i>2)v3=pref[i-3][j-1];
pref[i][j]=std::max(pref[i][j],v1+v2-v3+1);
}
if(dango[i][j][0]){
int v1=0;
int v2=0;
int v3=0;
if(i>0)v1=pref[i-1][j];
if(j>2)v2=pref[i][j-3];
if(j>2&&i>0)v3=pref[i-1][j-3];
pref[i][j]=std::max(pref[i][j],v1+v2-v3+1);
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
std::cout << dango[i][j][0] << '|' << dango[i][j][1] << ' ';
}
std::cout << '\n';
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
std::cout << pref[i][j] << ' ';
}
std::cout << '\n';
}
std::cout << pref[n-1][m-1];
}