#include <bits/stdc++.h>
using namespace std;
# define ll long long
void fastIO(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
char mapGame[50][50];
bool movable[50][50];
int W, H , row, col;
int dr[] = {1, 0, -1,0};
int dc[] = {0, 1, 0, -1};
int gold = 0;
bool isIn(int r, int c){
return r < W && r >= 0 && c < H && c >= 0;
}
void dfs(int r, int c){
if( mapGame[r][c] == '#')
return;
if(mapGame[r][c] == 'G')
gold++;
mapGame[r][c] = '#';
if(movable[r][c])
for(int k = 0; k < 4; k++ )
if(isIn(r + dr[k], c + dc[k]))
dfs(r + dr[k], c+dc[k]);
}
int main() {
fastIO();
while(cin >> H >> W){
for (int i = 0; i < W; i++)
cin >> mapGame[i];
memset(movable, true, sizeof(movable));
for (int i = 0; i < W; i++)
for (int j = 0; j < H; j++)
for (int k = 0; k < 4; k++) {
row = i + dr[k];
col = j + dc[k];
if (isIn(row, col) && mapGame[row][col] == 'T')
movable[i][j] = false;
}
for (int r = 0; r < W; r++)
for (int c = 0; c < H; c++)
if (mapGame[r][c] == 'T')
mapGame[r][c] = '#';
else if (mapGame[r][c] == 'P') {
row = r;
col = c;
}
gold = 0;
dfs(row, col);
cout << gold << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiMgZGVmaW5lIGxsIGxvbmcgbG9uZwp2b2lkIGZhc3RJTyh2b2lkKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBjb3V0LnRpZShOVUxMKTsKfQpjaGFyIG1hcEdhbWVbNTBdWzUwXTsKYm9vbCBtb3ZhYmxlWzUwXVs1MF07CmludCBXLCBIICwgcm93LCBjb2w7CmludCBkcltdID0gezEsIDAsIC0xLDB9OwppbnQgZGNbXSA9IHswLCAxLCAwLCAtMX07CmludCBnb2xkID0gMDsKYm9vbCBpc0luKGludCByLCBpbnQgYyl7CiAgICByZXR1cm4gciA8IFcgJiYgciA+PSAwICYmIGMgPCBIICYmIGMgPj0gMDsKfQp2b2lkIGRmcyhpbnQgciwgaW50IGMpewogICAgaWYoIG1hcEdhbWVbcl1bY10gPT0gJyMnKQogICAgICAgIHJldHVybjsKICAgIGlmKG1hcEdhbWVbcl1bY10gPT0gJ0cnKQogICAgICAgIGdvbGQrKzsKICAgIG1hcEdhbWVbcl1bY10gPSAnIyc7CiAgICBpZihtb3ZhYmxlW3JdW2NdKQogICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyBrKysgKQogICAgICAgICAgICBpZihpc0luKHIgKyBkcltrXSwgIGMgKyBkY1trXSkpCiAgICAgICAgICAgICAgICBkZnMociArIGRyW2tdLCBjK2RjW2tdKTsKfQppbnQgbWFpbigpIHsKICAgIGZhc3RJTygpOwogICAgd2hpbGUoY2luID4+IEggPj4gVyl7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IFc7IGkrKykKICAgICAgICBjaW4gPj4gbWFwR2FtZVtpXTsKICAgIG1lbXNldChtb3ZhYmxlLCB0cnVlLCBzaXplb2YobW92YWJsZSkpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBXOyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBIOyBqKyspCiAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgaysrKSB7CiAgICAgICAgICAgICAgICByb3cgPSBpICsgZHJba107CiAgICAgICAgICAgICAgICBjb2wgPSBqICsgZGNba107CiAgICAgICAgICAgICAgICBpZiAoaXNJbihyb3csIGNvbCkgJiYgbWFwR2FtZVtyb3ddW2NvbF0gPT0gJ1QnKQogICAgICAgICAgICAgICAgICAgIG1vdmFibGVbaV1bal0gPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgZm9yIChpbnQgciA9IDA7IHIgPCBXOyByKyspCiAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBIOyBjKyspCiAgICAgICAgICAgIGlmIChtYXBHYW1lW3JdW2NdID09ICdUJykKICAgICAgICAgICAgICAgIG1hcEdhbWVbcl1bY10gPSAnIyc7CiAgICAgICAgICAgIGVsc2UgaWYgKG1hcEdhbWVbcl1bY10gPT0gJ1AnKSB7CiAgICAgICAgICAgICAgICByb3cgPSByOwogICAgICAgICAgICAgICAgY29sID0gYzsKICAgICAgICAgICAgfQogICAgZ29sZCA9IDA7CiAgICBkZnMocm93LCBjb2wpOwogICAgY291dCA8PCBnb2xkIDw8ICJcbiI7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=