#include<fstream>
using namespace std;

char grid[50][50], grid2[50][50], c;
int total, a, b;

bool bound(int x, int y)
{
	if(x>=a) return false;
	if(x<0) return false;
	if(y>=b) return false;
	if(y<0) return false;
	return true;
}

void rec(int x, int y)
{
	int i, j, k, l;
	if('a'<=grid[x][y]&&grid[x][y]<='j')
	{
		for(k=0;k<a;++k)
		{
			for(l=0;l<b;++l)
			{
				if(grid[k][l]==grid[x][y]-' ')
				{
					total++;
					grid[x][y]=c;
					rec(k,l);
				}
			}
		}
	}
	grid[x][y]=c;
	for(i=-1;i<=1;++i)
	{
		for(j=-1;j<=1;++j)
		{
			if(bound(x+i,y+j))
			{
				if(grid[x+i][y+j]!='#'&&grid[x+i][y+j]!=c/*&&(grid[x+i][y+j]<'A'||grid[x+i][y+j]>'J')*/)
				{
					total++;
					rec(x+i,y+j);
				}
			}
		}
	}
	return;
}

int main()
{
	int i, j, k, l;
	bool done;
	ifstream fin("DATA5.txt");
	ofstream fout("OUT5.txt");
	fin>>a>>b;
	for(i=0;i<a;++i)
	{
		for(j=0;j<b;++j)
		{
			fin>>grid[i][j];
			grid2[i][j]=grid[i][j];
		}
	}
	for(c='1';c<='5';++c)
	{
		done=false;
		for(i=0;i<a;++i)
		{
			for(j=0;j<b;++j)
			{
				if(grid[i][j]==c)
				{
					total=0;
					rec(i,j);
					fout<<total+1<<endl;
/*					for(k=0;k<a;++k)
					{
						for(l=0;l<b;++l)
						{
							fout<<grid[k][l];
						}
						fout<<endl;
					}
*/					done=true;
					break;
				}
			}
			if(done) break;
		}
		for(i=0;i<a;++i)
		{
			for(j=0;j<b;++j)
			{
				grid[i][j]=grid2[i][j];
			}
		}
	}
	return 0;
}
