#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<string.h>
#define Max(a,b) a=max(a,b);
#define lol(i,n) for(int i=0;i<n;i++)
#define mod 1000000007
typedef long long ll;
using namespace std;
int h,w;
int dp[3010][3];
char m[3010][3010];
int main(){
	cin>>h>>w;
	lol(i,h)lol(j,w)cin>>m[i][j];
	int ans=0;
	for(int k=0;k<=h+w-2;k++){
		memset(dp,0,sizeof(dp));
		int last=0;
		for(int y=0;y<=k;y++){
			int x=k-y;
			if(x>=w||y>=h){
				continue;
			}
			bool tate=false,yoko=false;
			if(y>0)if(m[y-1][x]=='R'&&m[y][x]=='G'&&m[y+1][x]=='W')tate=1;
			if(x>0)if(m[y][x-1]=='R'&&m[y][x]=='G'&&m[y][x+1]=='W')yoko=1;
			Max(dp[last+1][0],dp[last][0]);
			Max(dp[last+1][0],dp[last][1]);
			Max(dp[last+1][0],dp[last][2]);
			if(tate){
				Max(dp[last+1][1],dp[last][0]+1);
				Max(dp[last+1][1],dp[last][1]+1);
			}
			if(yoko){
				Max(dp[last+1][2],dp[last][0]+1);
				Max(dp[last+1][2],dp[last][2]+1);
			}
			last++;
		}
		ans+=max(dp[last][0],max(dp[last][1],dp[last][2]));
	}
	cout<<ans<<endl;
	return 0;
}

