#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int W,H;
char mp[22][22];
int vis[22][22];
int stx,sty;
int ans;
struct Node{
	int x,y;
	Node(int xx,int yy):x(xx),y(yy){}
};
queue<Node> Q;
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
bool check(int x,int y){
	return x>=0&&y>=0&&x<H&&y<W;
}
void bfs(){
	memset(vis,0,sizeof vis);
	while(!Q.empty()) Q.pop();
	Q.push(Node(stx,sty));
	vis[stx][sty]=1;
	ans = 1;
	while(!Q.empty()){
		Node st = Q.front();
		Q.pop();
		for(int i=0;i<4;i++){
			int tx = st.x+dx[i];
			int ty = st.y+dy[i];
			if(check(tx,ty)&&mp[tx][ty]!='#'&&vis[tx][ty]==0){
				vis[tx][ty]=1;
				Q.push(Node(tx,ty));
				ans++;
			}
		}
	}
	printf("%d\n",ans);
}
int main(int argc,char **argv){
	while(scanf("%d%d",&W,&H)!=EOF&&(W||H)){
		for(int i=0;i<H;i++){
			scanf("%s",mp[i]);
			for(int j=0;j<W;j++){
				if(mp[i][j]=='@'){
					stx=i;
					sty=j;
				}
			}
		}
		bfs();
	}
	return 0;
}
