var n,m:integer;
a:array[1..1000,1..1000]of longint;
b:array[0..1000,0..1000]of boolean;
vizitate: longint;
i, j:integer;
begin

  read(n,m);
  for i:=1 to n do
  begin
     for j:=1 to m do
     read(a[i,j]);
  end;

  for i:=1 to n do
  begin
      for j:=1 to m do
      b[i,j]:=false;
  end;

  i := 1;
  j := 1;
  b[1,m+1]:=true;
  b[n+1,m]:=true;
  b[n,0]:=true;

  while vizitate <= n * m do
  begin
     {parcurgere stanga->dreapta}
     while not b[i,j+1] do
     begin
		 		write(a[i,j],' ');
     		b[i,j]:=true;
     		inc(j);
     		inc(vizitate);
      end;

     while not b[i+1,j] do
     begin
		 		write(a[i,j],' ');
     		b[i,j]:=true;
     		inc(i);
     		inc(vizitate);
      end;

     while not b[i,j-1] do
     begin
		 		write(a[i,j],' ');
     		b[i,j]:=true;
     		j:=j-1;
     		inc(vizitate);
      end;

      while not b[i-1,j] do
     begin
		 		write(a[i,j],' ');
     		b[i,j]:=true;
     		i:=i-1;
     		inc(vizitate);
      end;

    {parcurgere sus->jos}
     {parcurgere dreapta->stanga}
  	 {parcurgere jos->sus}
  end;
end.