#include<bits/stdc++.h>
using namespace std;
const double PI=acos(-1.0);
#define _max -0x7fffffff
char _map[26][26];
int visit[26][26];
int ans;
int w,h;
int x[4]={1,-1,0,0};
int y[4]={0,0,1,-1};
int p[26][26];
void dfs(int R,int C)
{
for(int i=0;i<4;i++)
{
int X=R+x[i];
int Y=C+y[i];
if(X>=0&&X<h&&Y>=0&&Y<w&&_map[X][Y]=='.'&&visit[X][Y]==0)
{
visit[X][Y]=1;
if(p[X][Y]==0)
{
p[X][Y]=1;
ans++;
}
dfs(X,Y);
visit[X][Y]=0;
}
}
}
int main()
{
while(scanf("%d%d",&w,&h)!=EOF&&(w!=0||h!=0)) //w为列,h为行
{
memset(_map,'\0',sizeof(_map));
memset(visit,0,sizeof(visit));
memset(p,0,sizeof(p));
ans=1;
int R,C;//@的行和列
for(int i=0;i<h;i++)
scanf("%s",_map[i]);
for(int j=0;j<h;j++)
for(int t=0;t<w;t++)
if(_map[j][t]=='@')
{
R=j;
C=t;
}
dfs(R,C);
printf("%d\n",ans);
}
}
#include<bits/stdc++.h>
using namespace std;
const double PI=acos(-1.0);
#define _max 0x7fffffff
char _map[30][30];
int visit[30][30];
int ans;
int w,h;
int _x[4]={1,-1,0,0};
int _y[4]={0,0,1,-1};
typedef struct NODE
{
int X;
int Y;
}NODE;
queue<NODE>Q;
void bfs(int x,int y)
{
visit[x][y]=1;
NODE S;
S.X=x;
S.Y=y;
Q.push(S);
while(!Q.empty())
{
NODE temp=Q.front();
Q.pop();
for(int i=0;i<4;i++)
{
int xt=temp.X+_x[i];
int yt=temp.Y+_y[i];
if(xt>=0&&xt<h&&yt>=0&&yt<w&&visit[xt][yt]==0&&_map[xt][yt]=='.')
{
NODE k;
k.X=xt;
k.Y=yt;
visit[xt][yt]=1;
Q.push(k); //Q.push({xt,xy});
ans++;
}
}
}
}
int main()
{
while(scanf("%d%d",&w,&h)!=EOF&&(w!=0||h!=0)) //w为列,h为行
{
memset(_map,'\0',sizeof(_map));
memset(visit,0,sizeof(visit));
ans=1;
int R,C;//@的行和列
for(int i=0;i<h;i++)
scanf("%s",_map[i]);
for(int j=0;j<h;j++)
for(int t=0;t<w;t++)
if(_map[j][t]=='@')
{
R=j;
C=t;
}
bfs(R,C);
printf("%d\n",ans);
}
return 0;
}