H, W = list(map(int, input().split()))

def change(x):

    if x == '#':

        return 1

    else:

        return 0

field = list()

for i in range(H):

    field.append(list(map(change,[i for i in eval(input())])))



vector = [[1, 0], [0, 1]]

check_list = [[0 for _ in range(W)] for i in range(H)]

check_list[0][0] = 1

count_list = [[[0, [0, 0]] for _ in range(W)] for i in range(H)]

count_list[0][0][0] = field[0][0]

zahyo_check = [[(0, 0)]]

for i in range(H+W-2):

    zahyo = zahyo_check[i]

    zahyo_kari = list()

    for (y, x) in zahyo:

        for (dy, dx) in vector:

            v = count_list[y][x][0]

            y_k = y + dy

            x_k = x + dx

            try:

                if field[y_k][x_k] == 1 and field[y][x] == 0:

                    v += 1

                        

                if check_list[y_k][x_k] == 0:

                    count_list[y_k][x_k][0] = v

                    count_list[y_k][x_k][1] = [y, x]

                    check_list[y_k][x_k] = 1

                    zahyo_kari.append((y_k, x_k))

                    

                else:

                    if v < count_list[y_k][x_k][0]:

                        count_list[y_k][x_k][0] = v

                        count_list[y_k][x_k][1] = [y, x]

                        

            except:

                pass

    zahyo_check.append(zahyo_kari)



print((count_list[H-1][W-1][0]))
H, W = list(map(int, input().split()))

def change(x):   # 黒なら1, 白なら0   ※しなくてもよい

    if x == '#':

        return 1

    else:

        return 0

field = list()

for i in range(H):

    field.append(list(map(change,[i for i in eval(input())])))



# 右と横に移動するベクトル

vector = [[1, 0], [0, 1]]



# 座標(i, j)に到達したか確認するリスト　未到達: 0 到達: 1 

check_list = [[0 for _ in range(W)] for _ in range(H)]

check_list[0][0] = 1



# 座標(i, j)に到達するために操作が何回か必要か記録するリスト

count_list = [[0 for _ in range(W)] for _ in range(H)]

count_list[0][0] = field[0][0]



# 座標(i, j)に到達する際、どのマスから来るのが最善か記録するリスト

zahyo_front = [[0] * W] * H

zahyo_front[0][0] = [0, 0]



# 探索候補の座標を記録するリスト   ※Queueモジュールなど使うと簡易になるらしい

# １つ目のfor文 i番目のk個目の候補の座標はzahyo_search[k][i]

zahyo_search = [[(0, 0)]]





for i in range(H+W-2):

    zahyo = zahyo_search[i]   # i番目の探索候補の座標を取り出す

    zahyo_kari = list()       # (i+1)回目の探索候補の座標を記録する仮リスト

    for (y, x) in zahyo:

        for (dy, dx) in vector:

            count = count_list[y][x]  

            y_k = y + dy

            x_k = x + dx

            try:               # if y_k < H and x_k < W: でもよい 

                

                if field[y_k][x_k] == 1 and field[y][x] == 0: 

                    

                    count += 1

                    # (y_k, x_k)が黒かつ(y, x)が白ならば連続でないので、countを+1する

                

                if check_list[y_k][x_k] == 0:        # (y_k, x_k)に未到達なら、そのまま記録する 

                    count_list[y_k][x_k] = count

                    zahyo_front[y_k][x_k] = [y, x]

                    check_list[y_k][x_k] = 1

                    zahyo_kari.append((y_k, x_k))    # (i+1)回目の探索候補の仮リストに入れる

                    

                else:                                # (y_k, x_k)に到達済

                    if count < count_list[y_k][x_k]:  # countが記録されていたものより小さければ採用

                        count_list[y_k][x_k] = count

                        zahyo_front[y_k][x_k] = [y, x]

                        

            except:

                pass

            

    zahyo_search.append(zahyo_kari) # 仮リストを探索リストに入れる



print((count_list[H-1][W-1]))
H, W = list(map(int, input().split()))


def change(x):
    if x == "#":
        return 1
    else:
        return 0


field = list()
for i in range(H):
    field.append(list(map(change, [i for i in eval(input())])))
vector = [[1, 0], [0, 1]]
check_list = [[0 for _ in range(W)] for i in range(H)]
check_list[0][0] = 1
count_list = [[[0, [0, 0]] for _ in range(W)] for i in range(H)]
count_list[0][0][0] = field[0][0]
zahyo_check = [[(0, 0)]]
for i in range(H + W - 2):
    zahyo = zahyo_check[i]
    zahyo_kari = list()
    for (y, x) in zahyo:
        for (dy, dx) in vector:
            v = count_list[y][x][0]
            y_k = y + dy
            x_k = x + dx
            try:
                if field[y_k][x_k] == 1 and field[y][x] == 0:
                    v += 1
                if check_list[y_k][x_k] == 0:
                    count_list[y_k][x_k][0] = v
                    count_list[y_k][x_k][1] = [y, x]
                    check_list[y_k][x_k] = 1
                    zahyo_kari.append((y_k, x_k))
                else:
                    if v < count_list[y_k][x_k][0]:
                        count_list[y_k][x_k][0] = v
                        count_list[y_k][x_k][1] = [y, x]
            except:
                pass
    zahyo_check.append(zahyo_kari)
print((count_list[H - 1][W - 1][0]))

H, W = list(map(int, input().split()))


def change(x):  # 黒なら1, 白なら0   ※しなくてもよい
    if x == "#":
        return 1
    else:
        return 0


field = list()
for i in range(H):
    field.append(list(map(change, [i for i in eval(input())])))
# 右と横に移動するベクトル
vector = [[1, 0], [0, 1]]
# 座標(i, j)に到達したか確認するリスト　未到達: 0 到達: 1
check_list = [[0 for _ in range(W)] for _ in range(H)]
check_list[0][0] = 1
# 座標(i, j)に到達するために操作が何回か必要か記録するリスト
count_list = [[0 for _ in range(W)] for _ in range(H)]
count_list[0][0] = field[0][0]
# 座標(i, j)に到達する際、どのマスから来るのが最善か記録するリスト
zahyo_front = [[0] * W] * H
zahyo_front[0][0] = [0, 0]
# 探索候補の座標を記録するリスト   ※Queueモジュールなど使うと簡易になるらしい
# １つ目のfor文 i番目のk個目の候補の座標はzahyo_search[k][i]
zahyo_search = [[(0, 0)]]
for i in range(H + W - 2):
    zahyo = zahyo_search[i]  # i番目の探索候補の座標を取り出す
    zahyo_kari = list()  # (i+1)回目の探索候補の座標を記録する仮リスト
    for (y, x) in zahyo:
        for (dy, dx) in vector:
            count = count_list[y][x]
            y_k = y + dy
            x_k = x + dx
            try:  # if y_k < H and x_k < W: でもよい
                if field[y_k][x_k] == 1 and field[y][x] == 0:
                    count += 1
                    # (y_k, x_k)が黒かつ(y, x)が白ならば連続でないので、countを+1する
                if check_list[y_k][x_k] == 0:  # (y_k, x_k)に未到達なら、そのまま記録する
                    count_list[y_k][x_k] = count
                    zahyo_front[y_k][x_k] = [y, x]
                    check_list[y_k][x_k] = 1
                    zahyo_kari.append((y_k, x_k))  # (i+1)回目の探索候補の仮リストに入れる
                else:  # (y_k, x_k)に到達済
                    if count < count_list[y_k][x_k]:  # countが記録されていたものより小さければ採用
                        count_list[y_k][x_k] = count
                        zahyo_front[y_k][x_k] = [y, x]
            except:
                pass
    zahyo_search.append(zahyo_kari)  # 仮リストを探索リストに入れる
print((count_list[H - 1][W - 1]))

-def change(x): +def change(x):  # 黒なら1, 白なら0   ※しなくてもよい +# 右と横に移動するベクトル -check_list = [[0 for _ in range(W)] for i in range(H)] +# 座標(i, j)に到達したか確認するリスト　未到達: 0 到達: 1 +check_list = [[0 for _ in range(W)] for _ in range(H)] -count_list = [[[0, [0, 0]] for _ in range(W)] for i in range(H)] -count_list[0][0][0] = field[0][0] -zahyo_check = [[(0, 0)]] +# 座標(i, j)に到達するために操作が何回か必要か記録するリスト +count_list = [[0 for _ in range(W)] for _ in range(H)] +count_list[0][0] = field[0][0] +# 座標(i, j)に到達する際、どのマスから来るのが最善か記録するリスト +zahyo_front = [[0] * W] * H +zahyo_front[0][0] = [0, 0] +# 探索候補の座標を記録するリスト   ※Queueモジュールなど使うと簡易になるらしい +# １つ目のfor文 i番目のk個目の候補の座標はzahyo_search[k][i] +zahyo_search = [[(0, 0)]] -    zahyo = zahyo_check[i] -    zahyo_kari = list() +    zahyo = zahyo_search[i]  # i番目の探索候補の座標を取り出す +    zahyo_kari = list()  # (i+1)回目の探索候補の座標を記録する仮リスト -            v = count_list[y][x][0] +            count = count_list[y][x] -            try: +            try:  # if y_k < H and x_k < W: でもよい -                    v += 1 -                if check_list[y_k][x_k] == 0: -                    count_list[y_k][x_k][0] = v -                    count_list[y_k][x_k][1] = [y, x] +                    count += 1 +                    # (y_k, x_k)が黒かつ(y, x)が白ならば連続でないので、countを+1する +                if check_list[y_k][x_k] == 0:  # (y_k, x_k)に未到達なら、そのまま記録する +                    count_list[y_k][x_k] = count +                    zahyo_front[y_k][x_k] = [y, x] -                    zahyo_kari.append((y_k, x_k)) -                else: -                    if v < count_list[y_k][x_k][0]: -                        count_list[y_k][x_k][0] = v -                        count_list[y_k][x_k][1] = [y, x] +                    zahyo_kari.append((y_k, x_k))  # (i+1)回目の探索候補の仮リストに入れる +                else:  # (y_k, x_k)に到達済 +                    if count < count_list[y_k][x_k]:  # countが記録されていたものより小さければ採用 +                        count_list[y_k][x_k] = count +                        zahyo_front[y_k][x_k] = [y, x] -    zahyo_check.append(zahyo_kari) -print((count_list[H - 1][W - 1][0])) +    zahyo_search.append(zahyo_kari)  # 仮リストを探索リストに入れる +print((count_list[H - 1][W - 1]))