编程题
### 问题描述
小蓝第二天非常想和小桥一起去看电影,因此小蓝早早地睡下,期待第二天陪小桥去玩的时候有个好精神!但无奈做了一个梦,你能帮助小蓝尽快逃出梦境吗?
这是一个镜像的空间,该空间有一个大小为 $n$ 行 $m$ 列的地图,小蓝最初位于该地图的左上角 $(1,1)$ 点。为了逃离这里,小蓝不得不使用”镜光宝盒“!“镜光宝盒”有两个技能:
- 一是“镜像逃离”,使用该技能后即可逃离镜像空间。
- 二是“镜像十字”,即第一次使用时,以当前地图的最右边界为轴,复制出一个以该轴对称的新地图!过程如下:
此时当前地图就变成了大小为 **$n$ 行 $2m$ 列的新地图**!
当第二次使用时,则会以当前地图的最下方边界为轴,复制出一个以该轴对称的新地图!过程如下:

此时当前地图就变成了大小为 **$2n$ 行 $2m$ 列的新地图**!但该技能**最多只能使用两次**!
由于受到梦境的限制,当使用"镜光宝盒"时,它的一技能只能在最右下角使用,而二技能只能在起点处使用。(**注意**:**地图的最右下角坐标会因当前地图的大小而发生改变**!)。”镜光宝盒“可以在规定限制下无限使用,但二技能最多只能使用两次!
地图上的每个点要么是陷阱(用 `#` 表示),无法通过;要么是空地(用 `*` 表示),允许通过。为了尽快逃离镜像空间,你不得不使用“镜光宝盒”。但小蓝不知道最少移动多少次才可以逃离镜像空间,聪明的你可以告诉他吗?如果无法逃离,请输出 `-1` 。
**数据保证起点处为空地**。
### 输入格式
输入共 $n + 1$ 行。
第一行两个整数 $n,m$ ,表示地图为 $n$ 行 $m$ 列。
接下来 $n$ 行,每行 $m$ 个字符,为 `* `或 `#` ( `*` 代表空地, `#` 代表陷阱)。
### 输出格式
输出一个整数,表示小蓝逃离镜像空间的最少移动次数,如果无法逃离,则输出 `-1`。
### 样例输入
```
5 5
***#*
**#*#
**#**
***#*
****#
```
### 样例输出
```
-1
```
### 说明
样例 与题目中的图片一致,经过两次翻转后仍无法到达最右下角,因此输出结果为 `-1` 。
### 评测数据规模
$2\leq n\leq m \leq 1000$。