import java.util.Scanner;
public class zolu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();//行
int n = sc.nextInt();//列
int arr[][]=new int[m][n];//先定义两个一维数组arr(用来接收输入的初始数据)
//和brr(用来判断某个数组是否被使用)
int brr[][]=new int[m][n];
for (int i = 0; i < m; i++) {//初始化接收数据
for (int j = 0; j < n; j++) {
arr[i][j]=sc.nextInt();//接收录入的数据
brr[i][j]=1;//arr【i】【j】对应brr【i】【j】的值 如果为1表面未被使用
}
}
int age=0;//用来统计已经输出的个数
int i=0;
int j=0;
System.out.print(arr[0][0]);//先打印初始位置的值
brr[0][0]=0;//把对应brr的数据修改为0表示已经使用
i++;//使此时的arr【i】【j】转到下一个位置
age++;
while (age<m*n){//当打印的个数小于总个数时进行循环
while (i<m&&brr[i][j]==1){ //左边由上到下
System.out.print(" "+arr[i][j]);
brr[i][j]=0;
age++;
i++;
}
i--;
j++;
while (j<m&&brr[i][j]==1){//下边由左到右
System.out.print(" "+arr[i][j]);
brr[i][j]=0;
age++;
j++;
}
j--;
i--;
while (i>=0&&brr[i][j]==1){//右边由下到上
System.out.print(" "+arr[i][j]);
brr[i][j]=0;
age++;
i--;
}
i++;
j--;
while (j>=0&&brr[i][j]==1){//上边由右到左
System.out.print(" "+arr[i][j]);
brr[i][j]=0;
age++;
j--;
}
j++;
i++;
}
}
}