砍竹子
题号:NC214452
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

prophet有一片竹林。

当初,他在种植时,把共棵竹子种成n排,m列,

一段时间后,由于水分、光照和养分不均等原因,每棵竹子的长势各不相同。

这使得整个竹林看上去参差不齐。

于是prophet就决定把所有竹子砍成同样的高度。

但prophet属实是一个古怪的人,他不打算用寻常的方法来完成这一目标。

他制定了这样一个规则,每次他都会选取一棵竹子,他会将这棵竹子砍成原本一半的高度。假设这棵竹子的高度为height,那么砍完后这棵竹子的高度就成了。(代表对向下取整,即只取的整数部分)

同一棵竹子可以被砍多次。

现在prophet会重复这个操作,直到所有竹子高度相同为止。

并且他会尽量使得最后竹林的高度最高。你能找到这个高度吗?

输入描述:

输入共n+1行。

第一行两个正整数代表竹林大小。

接下来n行,每行m个正整数,代表每颗竹子的初始高度。

输出描述:

输出共一行一个整数代表答案
示例1

输入

复制
2 2
7 29
13 6

输出

复制
3

说明

备注: