```
def findKthNumber(self, m, n, k):
low, high = 1, m * n + 1
while low < high:
mid = (high + low) / 2
c = sum(min(mid / i , n) for i in range(1, m + 1))
if c >= k: high = mid
else: low = mid + 1
return high
```

Ref: @shawngao https://discuss.leetcode.com/topic/101132/java-solution-binary-search