编程题
### 问题描述
小齐参加了冬季牛奥运会的越野滑雪比赛,赛道由一个 $M \times N$ 的高程格子网格描述,每个格子的高程在 $0$ 到 $1,000,000,000$ 的范围内。
赛道上的一些格子被指定为滑雪的关键点。牛奥运会的组织者希望为整个赛道分配一个难度等级 $D$,以便一头牛可以从任意一个关键点滑到另一个关键点,每次滑动都要保证相邻格子的高程差不超过 $D$。两个格子被称为相邻,如果它们在东、南、西、北四个方向中的一个方向上相邻。
赛道的难度等级即为 $D$ 的最小值,以确保所有关键点都可以通过相邻格子之间的滑动互相到达。
### 输入格式
第 $1$ 行:两个整数 $M$ 和 $N$。
接下来的 $M$ 行:每行包含 $N$ 个整数,表示格子的高程。
接下来的 $M$ 行:每行包含 $N$ 个值为 $0$ 或 $1$ 的整数,表示格子是否为关键点。其中,$1$ 表示是关键点,$0$ 表示不是关键点。
### 输出格式
赛道的难度等级 $D$,即确保所有关键点可达的最小高程差。
### 样例输入
```
3 5
20 21 18 99 5
19 22 20 16 26
18 17 40 60 80
1 0 0 0 1
0 0 0 0 0
0 0 0 0 1
```
### 样例输出
```
21
```
### 评测数据规模
$1 \leq M, N \leq 500$。