#include<stdio.h>
#include<string.h>
int x,y,dx[8]={0,1,1,1,0,-1,-1,-1},dy[8]={1,1,0,-1,-1,-1,0,1},co,sps,final;
char dic[10000][500],sp[10000][500];
void ans(char map[30][30],int nx,int ny,int dir){
	int fx,fy,len,po,qw,sw;
	char dam[500];
	for(po=0;po<500;po++){
		dam[po]=0;
	}
	fx=nx;
	fy=ny;
	len=0;
	while(1){
		dam[len]=map[nx][ny];
		len++;
		nx=(nx+dx[dir]+x)%x;
		ny=(ny+dy[dir]+y)%y;
		if(len>=final&&len!=1){
			if(co==0){
				strcpy(dic[co],dam);
				co++;
			}
			else{
				sw=0;
				for(po=0;po<co;po++){
					if(strcmp(dic[po],dam)==0){
						strcpy(sp[sps],dam);
						sps++;
						final=strlen(dam);
						sw++;
						break;
					}
				}
				if(sw==0){
					strcpy(dic[co],dam);
					co++;
				}
			}
		}
		if(nx==fx&&ny==fy){
			break;
		}
	}
	/*
	for(po=0;po<co;po++){
		for(qw=po+1;qw<co;qw++){
			if(strcmp(dic[po],dic[qw])==0&&strlen(dic[qw])>=final){
				strcpy(sp[sps],dic[qw]);
				sps++;
				final=strlen(dic[qw]);
			}
		}
	}
	*/
	return;
}
int main(void){
	int i,j,k,maxl;
	char dn[30][30],nu;
	while(1){
		scanf("%d %d",&y,&x);
		if(x==0&&y==0){
			break;
		}
		for(i=0;i<10000;i++){
			for(j=0;j<500;j++){
				dic[i][j]=sp[i][j]=0;
			}
		}
		for(i=0;i<30;i++){
			for(j=0;j<30;j++){
				dn[i][j]=0;
			}
		}
		i=j=0;
		while(1){
			scanf("%c",&nu);
			if(nu!='\n'){
				dn[i][j]=nu;
				i++;
				if(i==x){
					i=0;
					j++;
				}
				if(j==y){
					break;
				}
			}
		}
		co=sps=0;
		final=1;
		for(i=0;i<x;i++){
			for(j=0;j<y;j++){
				for(k=0;k<8;k++){
					ans(dn,i,j,k);
				}
			}
		}
		maxl=0;
		for(i=0;i<sps;i++){
			if(maxl<strlen(sp[i])){
				maxl=strlen(sp[i]);
			}
		}
		for(i=0;i<sps;i++){
			if(maxl>strlen(sp[i])){
				sp[i][0]='a';
			}
		}
		final=0;
		for(i=1;i<sps;i++){
			if(strcmp(sp[final],sp[i])>0){
				final=i;
			}
		}
		if(strlen(sp[final])==0){
			printf("0\n");
		}
		else{
			for(i=0;i<strlen(sp[final]);i++){
				printf("%c",sp[final][i]);
			}
			printf("\n");
		}
	}
	return 0;
}