#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <set>
using namespace std;

#define rep(i,n) for(int i=0;i<(n);i++)
#define mp(a,b) make_pair(a,b)
#define pb(a) push_back(a)
#define dbg(x) cout<<#x"="<<x<<endl

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<pii, int> ppi;

#define INF 1000000000
#define DAYS 100

int main(){
  int date[DAYS];

  while(true){
    int n,q;
    cin >> n >> q;
    if(n==0 && q==0) break;

    rep(i,DAYS) date[i]=0;

    rep(i,n){
      int m;
      scanf("%d",&m);
      rep(j,m){
	int d;
	scanf("%d", &d);
	date[d-1]++;
      }
    }

    int res=0, resN=q-1;
    rep(i,DAYS){
      if(date[i]>resN){
	res=i+1;
	resN=date[i];
      }
    }

    cout << res << endl;

  }

}
#include<iostream>
using namespace std;
int h,w,map[20][20];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int f(int i,int j,int cnt)
{
	if(cnt>10)return 11;
	int ans=11;
	for(int r=0;r<4;r++)
	{
		int x=i+dx[r],y=j+dy[r];
		while(x>=0&&y>=0&&x<h&&y<w&&map[x][y]==0)x+=dx[r],y+=dy[r];
		if(x<0||y<0||x>=h||y>=w)continue;
		else if(map[x][y]==3)return cnt+1;
		else
		{
			map[x][y]=0;
			if(x-dx[r]!=i||y-dy[r]!=j)ans=min(ans,f(x-dx[r],y-dy[r],cnt+1));
			map[x][y]=1;
		}
	}
	return ans;
}
main()
{
	while(cin>>w>>h,h)
	{
		for(int i=0;i<h;i++)for(int j=0;j<w;j++)cin>>map[i][j];
		int sx,sy;
		for(int i=0;i<h;i++)for(int j=0;j<w;j++)
		{
			if(map[i][j]==2)
			{
				sx=i;sy=j;map[i][j]=0;
			}
		}
		int t=f(sx,sy,0);
		cout<<(t>10?-1:t)<<endl;
	}
}

