def ar(N): A = [0] k = 0 a = 1 while 2*a <= N: for i in range(a-1,-1,-1): A.append(A[i]^(2**k)) k += 1 a *= 2 X = N - len(A) B = [] for i in range(0,len(A),2): if A[i] < X: B += [A[i],A[i]^(2**k),A[i+1]^(2**k),A[i+1]] else: B += [A[i],A[i+1]] return B H,W = map(int,input().split()) if H % 2 != 0 or W % 2 != 0: print(-1) else: h = 0 while 2**h < H: h += 1 w = 0 while 2**w < W: w += 1 ans = [[-1 for j in range(W)] for i in range(H)] A = ar(H) B = ar(W) if (H-1)*(2**w)+H <= (W-1)*(2**h)+W: for i in range(H): for j in range(W): ans[i][j] = A[i]*(2**w)+B[j] else: for i in range(H): for j in range(W): ans[i][j] = A[i]+B[j]*(2**h) for i in ans: print(*i)