from collections import * from itertools import * from functools import cache, partial from pprint import pprint import sys from typing import Any, Final try: from icecream import ic except ImportError: # Graceful fallback if IceCream isn't installed. ic = lambda *a: None if not a else (a[0] if len(a) == 1 else a) # noqa debug = partial(print, file=sys.stderr) dpprint = partial(pprint, stream=sys.stderr) sys.setrecursionlimit(10**6) MOD = 998244353 X, Y = map(int, input().split()) # ノードの数 N = X * Y # ic(X, Y, N) # N x N の隣接行列を作る D = [[0] * N for _ in range(N)] for i in range(0, N - 1, Y): # i - i + 1 - i + 2 - i + 3 ... + i + Y - 1 とパスをつなぐ for j in range(Y - 1): # ic(i + j, i + j + 1) D[i + j][i + j + 1] = 1 D[i + j + 1][i + j] = 1 for i in range(0, N - 1, Y): # i - i + Y - i + 2Y とパスをつなぐ u = i v = (i + Y) % N # ic(u, v) D[u][v] = 1 D[v][u] = 1 # ic(D) # 隣接行列からグラフ情報を出力する M = sum([sum(d) for d in D]) // 2 print(N, M) for i in range(N): for j in range(i + 1, N): if D[i][j] == 1: print(i + 1, j + 1)