def ceildiv(a: int, b: int) -> int: return (a + b - 1) // b INF = 1 << 62 N, M = map(int, input().split()) xs = [] for _ in range(N): a, b = map(int, input().split()) xs.append((a, b)) ys = sorted([ceildiv(M-a+1, b) for a, b in xs]) def can(m: int) -> bool: for d, i in enumerate(range(0, N, m), 1): for j in range(i, min(N, i+m)): if d > ys[j]: return False return True lo = 1 hi = INF ans = hi while lo <= hi: m = (lo + hi) // 2 if can(m): ans = min(ans, m) hi = m - 1 else: lo = m + 1 print(ans)