def ceildiv(a: int, b: int) -> int: return (a + b - 1) // b def bsearch_right(low: int, high: int, pred) -> int: assert pred(high) lo = low hi = high res = high while lo <= hi: m = (lo + hi) // 2 if pred(m): res = min(res, m) hi = m - 1 else: lo = m + 1 return res 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 ans = bsearch_right(1, INF, can) print(ans)