[丛雨]用积木搭出了一个宽度为 n 的大厦,但糟糕的没有所有列的高度都一致,如下图所示(每块积木都是 1∗1∗1 的正方体)

现在你需要做的是,尽可能多地往上叠积木,但是当你添加积木时必须满足以下条件:如果要在某一个位置上放一个积木,必须满足它的左下、下方、右下都有积木(用二维坐标 a 表示,如果要在 a[i,j] 位置放积木,那么 a[i−1,j−1] 、a[i,j−1] 、 a[i+1,j−1] 必须要有积木)。提供给你的积木有 m 块,大厦当然搭得越高越好,请问最高能到多少呢?
输入格式(block.in)
第一行两个用空格隔开的整数 n 和 m ,分别表示己搭好的宽度和可以使用的积木数量。
后面有 n 行,每行一个整数 hi 表示己搭建的第 i 列积木的高度。
输出格式(block.out)
一个整数,表示能搭建的最大高度。
输入样例
8 4
3
4
2
1
3
3
2
4
输出样例
5
数据范围
对于 30% 的数据,满足 n≤10,m≤1000 。
对于 50% 的数据,满足 n≤100,m≤1000000 。
对于 70% 的数据,满足 n≤1000,m≤10000000 。
对于 80% 的数据,满足 n≤10000,m≤100000000 。
对于 100% 的数据,满足 n≤100000,m≤1000000000 。