import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int L, N;
static int[] alpa_map;
static int[][] map;
static int[] ax = {-1, 1, 0, 0};
static int[] ay = {0, 0, -1, 1};
static int answer = 0;
static int max = 0;
String[] n_arr
= br.
readLine().
split(" ");
map = new int[L][N];
alpa_map = new int[26];
for(int i = 0; i<L; i++) {
for(int j = 0; j<N; j++) {
map[i][j] = (int)input.charAt(j) - 'A';
}
}
//alpa_map[map[0][0]] = 1;
answer++;
dfs(0, 0);
}
static void dfs(int i, int j) {
alpa_map[map[i][j]] = 1;
for(int a = 0; a<4; a++) {
int nx = i + ax[a];
int ny = j + ay[a];
if(nx >= 0 && ny >= 0 && nx < L && ny < N) {
if(alpa_map[map[nx][ny]] == 0) {
alpa_map[map[nx][ny]] = 1;
answer++;
if(max < answer) {
max = answer;
}
dfs(nx, ny);
}
}
}
answer--;
alpa_map[map[i][j]] = 0;
}
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKCnB1YmxpYyBjbGFzcyBNYWluIHsKICAgIHN0YXRpYyBpbnQgTCwgTjsKICAgIHN0YXRpYyBpbnRbXSBhbHBhX21hcDsKICAgIHN0YXRpYyBpbnRbXVtdIG1hcDsKICAgIHN0YXRpYyBpbnRbXSBheCA9IHstMSwgMSwgMCwgMH07CiAgICBzdGF0aWMgaW50W10gYXkgPSB7MCwgMCwgLTEsIDF9OwogICAgc3RhdGljIGludCBhbnN3ZXIgPSAwOwogICAgc3RhdGljIGludCBtYXggPSAwOwogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgIAlCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CiAgICAJCiAgICAJU3RyaW5nW10gbl9hcnIgPSBici5yZWFkTGluZSgpLnNwbGl0KCIgIik7CiAgICAJCiAgICAJTCA9IEludGVnZXIucGFyc2VJbnQobl9hcnJbMF0pOwogICAgCU4gPSBJbnRlZ2VyLnBhcnNlSW50KG5fYXJyWzFdKTsKICAgIAkKICAgIAltYXAgPSBuZXcgaW50W0xdW05dOwogICAgCQogICAgCWFscGFfbWFwID0gbmV3IGludFsyNl07CiAgICAJCiAgICAJZm9yKGludCBpID0gMDsgaTxMOyBpKyspIHsKICAgIAkJU3RyaW5nIGlucHV0ID0gYnIucmVhZExpbmUoKTsKICAgIAkJZm9yKGludCBqID0gMDsgajxOOyBqKyspIHsKICAgIAkJCW1hcFtpXVtqXSA9IChpbnQpaW5wdXQuY2hhckF0KGopIC0gJ0EnOwogICAgCQl9CiAgICAJfQogICAgCQogICAgCS8vYWxwYV9tYXBbbWFwWzBdWzBdXSA9IDE7CiAgICAJCiAgICAJYW5zd2VyKys7CiAgICAJCiAgICAJZGZzKDAsIDApOwogICAgCQogICAgCVN5c3RlbS5vdXQucHJpbnRsbihtYXgpOwogICAgfQogICAgCiAgICBzdGF0aWMgdm9pZCBkZnMoaW50IGksIGludCBqKSB7CiAgICAJYWxwYV9tYXBbbWFwW2ldW2pdXSA9IDE7CiAgICAJZm9yKGludCBhID0gMDsgYTw0OyBhKyspIHsKICAgIAkJaW50IG54ID0gaSArIGF4W2FdOwogICAgCQlpbnQgbnkgPSBqICsgYXlbYV07CiAgICAJCQogICAgCQlpZihueCA+PSAwICYmIG55ID49IDAgJiYgbnggPCBMICYmIG55IDwgTikgewogICAgCQkJaWYoYWxwYV9tYXBbbWFwW254XVtueV1dID09IDApIHsKICAgIAkJCQlhbHBhX21hcFttYXBbbnhdW255XV0gPSAxOwogICAgCQkJCWFuc3dlcisrOwogICAgCQkJCWlmKG1heCA8IGFuc3dlcikgewogICAgCQkJCQltYXggPSBhbnN3ZXI7CiAgICAJCQkJfQogICAgCQkJCWRmcyhueCwgbnkpOwogICAgCQkJfQogICAgCQl9CiAgICAJfQogICAgCQogICAgCWFuc3dlci0tOwoJCWFscGFfbWFwW21hcFtpXVtqXV0gPSAwOwogICAgfQp9Cgo=