#include <iostream>
using namespace std;
const int N = 25;
char a[N][N];
int num[26];
int dx[4] = {-1, 0, 1, 0} , dy[4] = {0, 1, 0, -1};
int n, m;
int res = 1;
int sum = 1;
void dfs(int x, int y)
{
num[a[x][y] - 'A'] = 1;
for(int i = 0; i < 4; i++)
{
int newx = x + dx[i];
int newy = y + dy[i];
if (newx <= n && newx >= 1 && newy <= m && newy >= 1 && num[a[newx][newy] - 'A'] == 0)
{
sum += 1;
res = max(res, sum);
dfs(newx, newy);
num[a[newx][newy] - 'A'] = 0;
sum -= 1;
}
}
}
int main()
{
cin >> n >>m;
for(int i = 1; i <=n; i ++)
for(int j = 1; j <= m; j ++)
{
char s;
cin>>s;
a[i][j] = s;
num[a[i][j]] = 0;
}
dfs(1, 1);
cout<<res;
}
#include <iostream>
using namespace std;
const int N = 25;
char a[N][N];
int num[26];
int dx[4] = {-1, 0, 1, 0} , dy[4] = {0, 1, 0, -1};
int n, m;
int res = 1;
int sum = 1;
void dfs(int x, int y)
{
num[a[x][y] - 'A'] = 1;
for(int i = 0; i < 4; i++)
{
int newx = x + dx[i];
int newy = y + dy[i];
if (newx <= n && newx >= 1 && newy <= m && newy >= 1 && num[a[newx][newy] - 'A'] == 0)
{
sum += 1;
res = max(res, sum);
dfs(newx, newy);
num[a[newx][newy] - 'A'] = 0;
sum -= 1;
}
}
}
int main()
{
cin >> n >>m;
for(int i = 1; i <=n; i ++)
for(int j = 1; j <= m; j ++)
{
char s;
cin>>s;
a[i][j] = s;
num[a[i][j]] = 0;
}
num[a[1][1] - 'A'] = 1;
dfs(1, 1);
cout<<res;
}