#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(){
	
	int N,Q,M,Date[101],i,l,k;
	
	while(0<=scanf("%d%d",&N,&Q)){
		for(i=0;i<101;i++){
			Date[i]=0;
		}
		
		if((N==0) && (Q==0)){
			break;
		}
		
		for(k=0;k<N;k++){
			scanf("%d",&M);
			if(M==0){
				continue;
			}else{
				for(i=0;i<M;i++){
					scanf("%d",&l);
					++Date[l];
				}
			}
		}
		l=0;
		i=0;
		for(k=0;k<100;k++){
			if(i<Date[k] && Date[k]>=Q){
				i=Date[k];
				l=k;
			}
		}
		
		printf("%d\n",l);
	}
	
	return 0;
}
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define irep(i, n) for (int i = (n); i >= 0; i--)
using namespace std;
using ll = long long;
using P = pair<int, int>;
const int INF = 1 << 25;
const int MOD = 1e9+7;
char m[50][50]; 
int dist[100][100];
const int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1};

int main() {
	int h,w;
	cin >> h >> w;
	int numOfW = 0;
	rep(i,h) rep(j,w) {
		cin >> m[i][j];
		if (m[i][j] == '.') numOfW++;
	}

	rep(i,h) rep(j,w) dist[i][j] = -1;
	queue<P> q;
	q.push({0,0});
	dist[0][0] = 1;

	while (!q.empty())
	{
		P p = q.front(); q.pop();
		int x = p.first, y = p.second;
		rep(i,4) {
			int nx = x+dx[i], ny = y+dy[i];
			if (nx<0||nx>=h||nx<0||ny>=w) continue;
			if (m[nx][ny]=='#'||dist[nx][ny]!=-1) continue;
			dist[nx][ny] = dist[x][y] + 1;
			q.push({nx,ny});
		}
	}
	
	if (dist[h-1][w-1] == -1) cout << -1 << endl;
	else cout << numOfW - dist[h-1][w-1] << endl;
	


	return 0;
}