#include <cstdio>
#include <string>
#include <set>
#include <vector>
using  namespace std;

int dr[]={-1, -1, -1, 0, 0, 1, 1, 1};
int dc[]={-1, 0, 1, -1, 1, -1, 0, 1};

bool cmp(const string& a, const string& b)
{
    if (a.size()<b.size()) return 1;
    if (a.size()>b.size()) return 0;
    return a>b;
}

int main()
{
    int n, m;
    while (scanf("%d%d", &n, &m), n) {
        char s[11][21];
        for(int i=0;i<n;++i) scanf("%s", s[i]);

        int maxlen=0;
        vector<string> spells[200];
        for(int i=0;i<n;++i) for(int j=0;j<m;++j) for(int k=0;k<8;++k) {
            int r=i, c=j, q=0;
            string t;
            do {
                t+=s[r][c];
                spells[q++].push_back(t);
                r=(r+dr[k]+2*n)%n;
                c=(c+dc[k]+2*m)%m;
            } while (r!=i || c!=j);
            maxlen=max(maxlen, q);
        }

        string res;
        for(int k=1;k<maxlen;++k) {
            int N=spells[k].size();
            set<string> v;
            for(int i=0;i<N;++i) {
                if (v.count(spells[k][i]) and cmp(res, spells[k][i]))
                    res=spells[k][i];
                v.insert(spells[k][i]);
            }
        }
        puts(res.size()?res.c_str():"0");
    }
    return 0;
}