//这里介绍一种处理矩阵打印等一系列问题的常用做法:分圈处理
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    int arr[n][m];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++)
            cin>>arr[i][j];
    }
    int x1=0,y1=0,x2=n-1,y2=m-1;//左上角和右下角
    int sum=0;
    while(x1<=x2&&y1<=y2){
        //把矩阵看成由一个个圈组成,对每一个圈进行单独打印
        if(x1==x2){//只有一行时
            for(int j=y1;j<=y2;j++){
                cout<<arr[x1][j]<<" ";
                sum++;
            }
        }
        else if(y1==y2){//只有一列时
            for(int i=x1;i<=x2;i++){
                cout<<arr[i][y1]<<" ";
                sum++;
            }
                
        }
        else{
            //从左到右
            int i=x1,j=y1;
            while(j<=y2){
                cout<<arr[i][j]<<" ";
                sum++;
                j++;
            }
            //从上到下
            i=x1+1,j=y2;
            while(i<=x2){
                cout<<arr[i][j]<<" ";
                i++;
                sum++;
            }
            //从右到左
            i=x2,j=y2-1;
            while(j>=y1){
                cout<<arr[i][j]<<" ";
                j--;
                sum++;
            }
            //从下到上
            i=x2-1,j=y1;
            while(i>x1){
                cout<<arr[i][j]<<" ";
                i--;
                sum++;
            }
        }
        x1++;
        y1++;
        x2--;
        y2--;
    }
    return 0;
}