#include<bits/stdc++.h>
using namespace std;

int n, m;
int start_x, start_y, target_x, target_y;
bool visited[20][20] = {false}; // 标记已访问的位置
int min_steps = INT_MAX; // 记录最小步数
// 马的8个移动方向(dx, dy)
int dx[8] = {2, 1, -1, -2, -2, -1, 1, 2};
int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};

// 深度优先搜索函数,当前位置(x, y),当前步数steps
void dfs(int x, int y, int steps) {
    // 如果到达目标位置,更新最小步数
    if (x == target_x && y == target_y) {
        if (steps < min_steps) {
            min_steps = steps;
        }
        return;
    }
    // 尝试8个方向的移动
    for (int i = 0; i < 8; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];
        // 检查新位置是否在棋盘内且未被访问
        if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !visited[nx][ny]) {
            visited[nx][ny] = true; // 标记为已访问
            dfs(nx, ny, steps + 1); // 递归搜索,步数加1
            visited[nx][ny] = false; // 回溯,取消标记
        }
    }
}

int main() {
    cin >> n >> m >> start_x >> start_y >> target_x >> target_y;
    // 标记初始位置为已访问
    visited[start_x][start_y] = true;
    // 从初始位置开始搜索,初始步数为0
    dfs(start_x, start_y, 0);
    cout << min_steps << endl;
    return 0;
}

/**************************************************************
	Problem: 1438
	User: zhengzihao
	Language: C++
	Result: Accepted
	Time:46 ms
	Memory:2072 kb
****************************************************************/