import sys input = sys.stdin.readline # エラトステネスの篩を用いた素因数分解・約数列挙 MAX=3*10**5+10 # 使いたい最大値を指定 # Sieve[i]で、iの最も小さい1でない約数を返す。 Sieve=[i for i in range(MAX)] for i in range(2,MAX): if Sieve[i]!=i: continue for j in range(i,MAX,i): if Sieve[j]==j: Sieve[j]=i # 素因数分解 def fact(x): D=dict() while x!=1: k=Sieve[x] if k in D: D[k]+=1 else: D[k]=1 x//=k return D # 約数列挙 def faclist(x): LIST=[1] while x!=1: k=Sieve[x] count=0 while x%k==0: count+=1 x//=k LIST2=[] for l in LIST: for i in range(1,count+1): LIST2.append(l*k**i) LIST+=LIST2 return LIST H,W=list(map(int,input().split())) flag=0 if H=need+len(LIST)-1: F=fact(H*W) NOW=[1] for f in F: k=F[f] X=[1] for i in range(k): X.append(X[-1]*f) X.reverse() NOW2=[] for x in X: L=[] for a in NOW: L.append(a*x) L.reverse() NOW2.append(L) NOW2.reverse() NOW=[] for x in NOW2: NOW+=x #print(NOW) NOW.reverse() D={FLIST[i]:i for i in range(len(FLIST))} ANS=[[0]*W for i in range(H)] height=0 for c in NOW: w=0 L=D[c] if c==1: height+=1 continue #print("!",LIST[L]) for x in LIST[L]: if ANS[height][w]!=0: height+=1 ANS[height][w]=x w+=1 if w==W: w=0 height+=2 ind=0 for i in range(H): for j in range(W): if ANS[i][j]==0: ANS[i][j]=LIST[0][ind] ind+=1 if flag: ANS2=[[0]*H for i in range(W)] for i in range(W): for j in range(H): ANS2[i][j]=ANS[j][i] ANS=ANS2 for ans in ANS: print(*ans) elif H>=need: F=fact(H*W) NOW=[1] for f in F: k=F[f] X=[1] for i in range(k): X.append(X[-1]*f) X.reverse() NOW2=[] for x in X: L=[] for a in NOW: L.append(a*x) L.reverse() NOW2.append(L) NOW2.reverse() NOW=[] for x in NOW2: NOW+=x #print(NOW) NOW.reverse() D={FLIST[i]:i for i in range(len(FLIST))} ANS=[[0]*W for i in range(H)] height=0 for c in NOW: w=0 L=D[c] if c==1: height+=1 continue #print("!",LIST[L]) for x in LIST[L]: if ANS[height][w]!=0: height+=1 ANS[height][w]=x w+=1 if w==W: w=0 ind=0 for i in range(H): for j in range(W): if ANS[i][j]==0: ANS[i][j]=LIST[0][ind] ind+=1 if flag: ANS2=[[0]*H for i in range(W)] for i in range(W): for j in range(H): ANS2[i][j]=ANS[j][i] ANS=ANS2 for ans in ANS: print(*ans) else: a=H*W P=[] for i in range(2,H*W+1): if a%i==0: P.append(i) while a%i==0: a//=i P.sort(reverse=True) A=list(range(1,H*W+1)) LIST=[] for i in range(len(P)): if i+1