#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> m >> n;
int s = 1;
int array[m][n];
for (int y = 0; y < n; y++) {
array[0][y] = s;
s++;
}
for (int x = 1; x < m; x++) {
array[x][n - 1] = s;
s++;
}
for (int y = n - 2; y >= 0; y--) {
array[m - 1][y] = s;
s++;
}
for (int x = m - 2; x > 0; x--) {
array[x][0] = s;
s++;
}
int c = 1;
int d = 1;
while (s < m * n) {
while (array[c][d + 1] == 0) {
array[c][d] = s;
s++;
d++;
}
while (array[c + 1][d] == 0) {
array[c][d] = s;
s++;
c++;
}
while (array[c][d - 1] == 0) {
array[c][d] = s;
s++;
d--;
}
while (array[c - 1][d] == 0) {
array[c][d] = s;
s++;
c--;
}
}
for (int x = 0; x < m; x++) {
for (int y = 0; y < n; y++) {
if (array[x][y] == 0) {
array[x][y] = s;
}
}
}
for (int x = 0; x < m; x++) {
for (int y = 0; y < n; y++) {
if (array[x][y] < 10) {
cout << array[x][y] << " ";
}
else {
cout << array[x][y] << " ";
}
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbWFpbigpIHsKCWludCBuLCBtOwoJY2luID4+IG0gPj4gbjsKCWludCBzID0gMTsKCWludCBhcnJheVttXVtuXTsKCWZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKSB7CgkJYXJyYXlbMF1beV0gPSBzOwoJCXMrKzsKCX0KCWZvciAoaW50IHggPSAxOyB4IDwgbTsgeCsrKSB7CgkJYXJyYXlbeF1bbiAtIDFdID0gczsKCQlzKys7Cgl9Cglmb3IgKGludCB5ID0gbiAtIDI7IHkgPj0gMDsgeS0tKSB7CgkJYXJyYXlbbSAtIDFdW3ldID0gczsKCQlzKys7Cgl9Cglmb3IgKGludCB4ID0gbSAtIDI7IHggPiAwOyB4LS0pIHsKCQlhcnJheVt4XVswXSA9IHM7CgkJcysrOwoJfQoJaW50IGMgPSAxOwoJaW50IGQgPSAxOwoKCXdoaWxlIChzIDwgbSAqIG4pIHsKCQl3aGlsZSAoYXJyYXlbY11bZCArIDFdID09IDApIHsKCQkJYXJyYXlbY11bZF0gPSBzOwoJCQlzKys7CgkJCWQrKzsKCQl9CgkJd2hpbGUgKGFycmF5W2MgKyAxXVtkXSA9PSAwKSB7CgkJCWFycmF5W2NdW2RdID0gczsKCQkJcysrOwoJCQljKys7CgkJfQoJCXdoaWxlIChhcnJheVtjXVtkIC0gMV0gPT0gMCkgewoJCQlhcnJheVtjXVtkXSA9IHM7CgkJCXMrKzsKCQkJZC0tOwoJCX0KCQl3aGlsZSAoYXJyYXlbYyAtIDFdW2RdID09IDApIHsKCQkJYXJyYXlbY11bZF0gPSBzOwoJCQlzKys7CgkJCWMtLTsKCQl9Cgl9Cglmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykgewoJCWZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKSB7CgkJCWlmIChhcnJheVt4XVt5XSA9PSAwKSB7CgkJCQlhcnJheVt4XVt5XSA9IHM7CgkJCX0KCQl9Cgl9Cglmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykgewoJCWZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKSB7CgkJCWlmIChhcnJheVt4XVt5XSA8IDEwKSB7CgkJCQljb3V0IDw8IGFycmF5W3hdW3ldIDw8ICIgIjsKCQkJfQoJCQllbHNlIHsKCQkJCWNvdXQgPDwgYXJyYXlbeF1beV0gPDwgIiAgIjsKCQkJfQoJCX0KCX0KCXJldHVybiAwOwp9