编程题
### 问题描述
用积木搭出了一个宽度为 $n$ 的大厦,但糟糕的没有所有列的高度都一致,如下图所示(每块积木都是 $1\times 1\times 1$ 的正方体)

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