#include <bits/stdc++.h>
#define _nhatminh int main()
#define ll long long
#define str string
#define fir first
#define sec second
#define ld long double
#define pb push_back
#define MOD 100000009
#define freopen(name) if(fopen(name".INP","r")) {freopen (name".INP","r",stdin); freopen (name".OUT","w",stdout);}
#define ALL(x) (x).begin(),(x).end()
#define piint pair < int , int >
#define piL pair < int , ll>
#define pLL pair < ll , ll >
#define TIME (1.0*clock()/CLOCKS_PER_SEC)
using namespace std;
const int Max_n=2000;
char a[Max_n+3][Max_n+3];
str dp[Max_n+3][Max_n+3] ;
int n , m ;
int dx[] = { 0 , 1 , 1 , -1 };
int dy[] = { 1 , 0 , 0 , 0 } ;
int trace[Max_n+3][Max_n+3] ;
void bfs ( int i , int j ){
dp[1][1] = a[1][1] ;
queue < piint > q ;
q.push( { 1 , 1 }) ;
while ( q.size()){
piint v = q.front() ;
q.pop() ;
for (int i = 0 ; i < 2 ; i ++ ){
int x = v.fir + dx[i] ;
int y = v.sec + dy[i] ;
if ( x >= 1 && x <= n
&& y >= 1 && y <= m ){
str new_dp = dp[v.fir][v.sec] + a[x][y] ;
if (dp[x][y].empty()){
dp[x][y] = new_dp ;
q.push({x,y}) ;
continue ;
}
if ( dp[x][y] <= new_dp ) continue ;
dp[x][y] = new_dp ;
q.push({x,y});
}
}
}
}
int kt[Max_n+3][Max_n+3] ;
void bfs01 ( int i , int j ){
queue < piint > d ;
d.push({i,j}) ;
while ( d.size()) {
piint v = d.front() ;
//d.pop_front() ;
d.pop();
char i_1 = 0, i_2 = 0;
for (int i = 0 ; i < 2 ; i ++ ){
int x = v.fir + dx[i] ;
int y = v.sec + dy[i] ;
if ( x >= 1 && x <= n
&& y >= 1 && y <= m ){
if ( i == 0 ) i_1 = a[x][y] ;
else i_2 = a[x][y] ;
}
}
int x = v.fir + dx[0], y = v.sec + dy[0];
int x1 = v.fir + dx[1] , y1 = v.sec + dy[1] ;
if ( i_1 != 0 || i_2 != 0){
int cp = min ( i_1 , i_2 );
if (cp== 0){
cp = max ( i_1 , i_2) ;
}
if ( i_1 == i_2){
if (kt[x][y] > cp){
kt[x][y] = cp ;
trace[x][y] = 0 ;
d.push({x,y}) ;
}
if (kt[x1][y1] > cp){
kt[x1][y1] = cp ;
trace[x1][y1] = 1 ;
d.push({x1,y1}) ;
}
//cout << v.fir << ' ' << v.sec << ' ' << x << ' ' << y << ' ' << x1 << ' ' << y1 << '\n';
}
else if ( i_1 > i_2 ){
if (kt[x][y] > cp){
kt[x][y] = cp ;
trace[x][y] = 0 ;
d.push({x,y}) ;
}
}
else {
if (kt[x1][y1] > cp){
kt[x1][y1] = cp ;
trace[x1][y1] = 1 ;
d.push({x1,y1}) ;
}
}
}
}
}
void TRY_VET (){
piint ou ;
ou.fir = n , ou.sec = m ;
std::vector<char> ans;
while ( n != 1|| m != 1){
int i = trace[n][m] ;
//cout << i << '\n';
ans.pb(a[n][m]) ;
n -= dx[i];
m -= dy[i] ;
}
ans.pb(a[1][1]);
reverse(ALL(ans));
for (auto x : ans) {
cout << x ;
}
}
void sub_FULL(){
for (int i = 1 ; i <= n; i ++ )
for (int j = 1 ; j <= m ; j ++ )
kt[i][j]= 10000;
bfs01( 1 , 1 ) ;
TRY_VET() ;
}
void solve(){
cin >> n >> m ;
for (int i =1 ; i <= n ; i ++ ){
str s ; cin >> s;
for (int j =1 ; j <=m ; j ++ ){
a[i][j] = s[j-1] ;
}
}
if ( n <= 500 ){
bfs(1,1) ;
cout << dp[n][m] ;
return ;
}
else sub_FULL() ;
}
_nhatminh{
freopen("spath");
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int q=1;
// cin >> q;
while (q--)
solve();
cerr << '\n' << "Time elapsed " << TIME << "s.\n";
return (0);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgX25oYXRtaW5oICBpbnQgbWFpbigpCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgc3RyIHN0cmluZwojZGVmaW5lIGZpciBmaXJzdAojZGVmaW5lIHNlYyBzZWNvbmQKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIE1PRCAxMDAwMDAwMDkKI2RlZmluZSBmcmVvcGVuKG5hbWUpIGlmKGZvcGVuKG5hbWUiLklOUCIsInIiKSkge2ZyZW9wZW4gKG5hbWUiLklOUCIsInIiLHN0ZGluKTsgZnJlb3BlbiAobmFtZSIuT1VUIiwidyIsc3Rkb3V0KTt9CiNkZWZpbmUgQUxMKHgpICh4KS5iZWdpbigpLCh4KS5lbmQoKQojZGVmaW5lIHBpaW50IHBhaXIgPCBpbnQgLCBpbnQgPgojZGVmaW5lIHBpTCBwYWlyIDwgaW50ICwgbGw+CiNkZWZpbmUgcExMIHBhaXIgPCBsbCAsIGxsID4KI2RlZmluZSBUSU1FICgxLjAqY2xvY2soKS9DTE9DS1NfUEVSX1NFQykKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE1heF9uPTIwMDA7CmNoYXIgYVtNYXhfbiszXVtNYXhfbiszXTsKc3RyIGRwW01heF9uKzNdW01heF9uKzNdIDsKaW50IG4gLCBtIDsgCmludCBkeFtdID0geyAwICwgMSAsIDEgLCAtMSB9OwppbnQgZHlbXSA9IHsgMSAsIDAgLCAwICwgMCB9IDsKaW50IHRyYWNlW01heF9uKzNdW01heF9uKzNdIDsgCnZvaWQgYmZzICggaW50IGkgLCBpbnQgaiApewoJZHBbMV1bMV0gPSBhWzFdWzFdIDsKCXF1ZXVlIDwgcGlpbnQgPiBxIDsKCXEucHVzaCggeyAxICwgMSB9KSA7Cgl3aGlsZSAoIHEuc2l6ZSgpKXsKCQlwaWludCB2ID0gcS5mcm9udCgpIDsKCQlxLnBvcCgpIDsKCQlmb3IgKGludCBpID0gMCA7IGkgPCAyIDsgaSArKyApewoJCQlpbnQgeCA9IHYuZmlyICsgZHhbaV0gOwoJCQlpbnQgeSA9IHYuc2VjICsgZHlbaV0gOwoJCQlpZiAoIHggPj0gMSAmJiB4IDw9IG4gCgkJCQkmJiB5ID49IDEgJiYgeSA8PSBtICl7CgkJCQlzdHIgbmV3X2RwID0gZHBbdi5maXJdW3Yuc2VjXSArIGFbeF1beV0gOwoJCQkJaWYgKGRwW3hdW3ldLmVtcHR5KCkpewoJCQkJCWRwW3hdW3ldID0gbmV3X2RwIDsKCQkJCQlxLnB1c2goe3gseX0pIDsKCQkJCQljb250aW51ZSA7CgkJCQl9CgkJCQlpZiAoIGRwW3hdW3ldIDw9IG5ld19kcCApIGNvbnRpbnVlIDsKCQkJCWRwW3hdW3ldID0gbmV3X2RwIDsKCQkJCXEucHVzaCh7eCx5fSk7CgkJCX0KCQl9Cgl9Cn0KaW50IGt0W01heF9uKzNdW01heF9uKzNdIDsgICAKdm9pZCBiZnMwMSAoIGludCBpICwgaW50IGogKXsKCXF1ZXVlIDwgcGlpbnQgPiBkIDsKCWQucHVzaCh7aSxqfSkgOwoJd2hpbGUgKCBkLnNpemUoKSkgewoJCXBpaW50IHYgPSBkLmZyb250KCkgOwoJCS8vZC5wb3BfZnJvbnQoKSA7CgkJZC5wb3AoKTsKCQljaGFyIGlfMSA9IDAsIGlfMiA9IDA7CgkJZm9yIChpbnQgaSA9IDAgOyBpIDwgMiA7IGkgKysgKXsKCQkJaW50IHggPSB2LmZpciArIGR4W2ldIDsKCQkJaW50IHkgPSB2LnNlYyArIGR5W2ldIDsKCQkJaWYgKCB4ID49IDEgJiYgeCA8PSBuIAoJCQkJJiYgeSA+PSAxICYmIHkgPD0gbSApewoJCQkJaWYgKCBpID09IDAgKSBpXzEgPSBhW3hdW3ldIDsKCQkJCWVsc2UgaV8yID0gYVt4XVt5XSA7CgkJCX0KCQl9CgkJaW50IHggPSB2LmZpciArIGR4WzBdLCB5ID0gdi5zZWMgKyBkeVswXTsgCgkJaW50IHgxID0gdi5maXIgKyBkeFsxXSAsIHkxID0gdi5zZWMgKyBkeVsxXSA7CgkJaWYgKCBpXzEgIT0gMCB8fCBpXzIgIT0gMCl7CgkJaW50IGNwID0gbWluICggaV8xICwgaV8yICk7CgkJCWlmIChjcD09IDApewoJCQkJY3AgPSBtYXggKCBpXzEgLCBpXzIpIDsKCQkJfQoJCQlpZiAoIGlfMSA9PSBpXzIpewoJCQkJaWYgKGt0W3hdW3ldID4gY3ApewoJCQkJCWt0W3hdW3ldID0gY3AgOwoJCQkJCXRyYWNlW3hdW3ldID0gMCA7CgkJCQkJZC5wdXNoKHt4LHl9KSA7CgkJCQl9CgkJCQlpZiAoa3RbeDFdW3kxXSA+IGNwKXsKCQkJCQlrdFt4MV1beTFdID0gY3AgOwoJCQkJCXRyYWNlW3gxXVt5MV0gPSAxIDsKCQkJCQlkLnB1c2goe3gxLHkxfSkgOwoJCQkJfQoKCQkJCS8vY291dCA8PCB2LmZpciA8PCAnICcgPDwgdi5zZWMgPDwgJyAnIDw8IHggPDwgJyAnIDw8IHkgPDwgJyAnIDw8IHgxIDw8ICcgJyA8PCB5MSA8PCAnXG4nOwoJCQl9CgkJCWVsc2UgaWYgKCBpXzEgPiBpXzIgKXsKCQkJCWlmIChrdFt4XVt5XSA+IGNwKXsKCQkJCQlrdFt4XVt5XSA9IGNwIDsKCQkJCQl0cmFjZVt4XVt5XSA9IDAgOwoJCQkJCWQucHVzaCh7eCx5fSkgOwoJCQkJfQoJCQl9CgkJCWVsc2UgewoJCQkJaWYgKGt0W3gxXVt5MV0gPiBjcCl7CgkJCQkJa3RbeDFdW3kxXSA9IGNwIDsKCQkJCQl0cmFjZVt4MV1beTFdID0gMSA7CgkJCQkJZC5wdXNoKHt4MSx5MX0pIDsKCQkJCX0KCQkJfQoJCX0KIAl9Cn0Kdm9pZCBUUllfVkVUICgpewoJcGlpbnQgb3UgOwoJb3UuZmlyID0gbiAsIG91LnNlYyA9IG0gOwoJc3RkOjp2ZWN0b3I8Y2hhcj4gYW5zOwoJd2hpbGUgKCBuICE9IDF8fCBtICE9IDEpewoJCWludCBpID0gdHJhY2Vbbl1bbV0gOwoJCS8vY291dCA8PCBpIDw8ICdcbic7CgkJYW5zLnBiKGFbbl1bbV0pIDsKCQluIC09IGR4W2ldOwoJCW0gLT0gZHlbaV0gOwoJfQoJYW5zLnBiKGFbMV1bMV0pOwoJcmV2ZXJzZShBTEwoYW5zKSk7Cglmb3IgKGF1dG8geCA6IGFucykgewoJCWNvdXQgPDwgeCA7Cgl9Cn0Kdm9pZCBzdWJfRlVMTCgpewoJZm9yIChpbnQgaSA9IDEgOyBpIDw9IG47IGkgKysgKQoJCWZvciAoaW50IGogPSAxIDsgaiA8PSBtIDsgaiArKyApCgkJCWt0W2ldW2pdPSAxMDAwMDsgCgliZnMwMSggMSAsIDEgKSA7CglUUllfVkVUKCkgOwp9CnZvaWQgc29sdmUoKXsKCWNpbiA+PiBuID4+IG0gOwoJZm9yIChpbnQgaSA9MSAgOyBpIDw9IG4gOyBpICsrICl7CgkJc3RyIHMgOyBjaW4gPj4gczsKCQlmb3IgKGludCBqID0xIDsgaiA8PW0gOyBqICsrICl7CgkJCWFbaV1bal0gPSBzW2otMV0gOwoJCX0KCX0KCWlmICggbiA8PSA1MDAgKXsKCQliZnMoMSwxKSA7CgkJY291dCA8PCBkcFtuXVttXSA7CgkJcmV0dXJuIDsKCX0KCWVsc2Ugc3ViX0ZVTEwoKSA7Cn0KX25oYXRtaW5oewpmcmVvcGVuKCJzcGF0aCIpOwppb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwpjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKaW50IHE9MTsKLy8gY2luID4+IHE7CndoaWxlIChxLS0pCglzb2x2ZSgpOwpjZXJyIDw8ICdcbicgPDwgIlRpbWUgZWxhcHNlZCAiIDw8IFRJTUUgPDwgInMuXG4iOwpyZXR1cm4gKDApOwp9