package main

import (
	"bufio"
	"fmt"
	"os"
)

/* 
    BFS
    visited[pos][tp] 表示在位置 pos,使用 tp 次传送的状态是否访问过
	tp 只有 0 和 1 两种状态(因为用两次等于没用)
    queue := []State
 */

type State struct {
	pos   int // 当前位置 (0 ~ n-1)
	steps int // 已用步数
	tp    int // 是否使用过传送: 0 或 1
}

func minSteps(n, k, a, b, x, y int) int {
	a-- // 转为 0-indexed
	b-- // 转为 0-indexed

	if a == b {
		return 0
	}

	// visited[pos][tp] 表示在位置 pos,使用 tp 次传送的状态是否访问过
	// tp 只有 0 和 1 两种状态(因为用两次等于没用)
	visited := make([][]bool, n)
	for i := range visited {
		visited[i] = make([]bool, 2) // tp: 0 或 1
	}

	// BFS 队列
	queue := []State{{a, 0, 0}}
	visited[a][0] = true

	for len(queue) > 0 {
		cur := queue[0]
		queue = queue[1:] // 出队

		nextSteps := cur.steps + 1

		// 1. 顺时针移动 x 步
		p1 := (cur.pos + x) % n
		if !visited[p1][cur.tp] {
			if p1 == b {
				return nextSteps
			}
			visited[p1][cur.tp] = true
			queue = append(queue, State{p1, nextSteps, cur.tp})
		}

		// 2. 逆时针移动 y 步
		p2 := (cur.pos - y + n) % n // +n 防止负数
		if !visited[p2][cur.tp] {
			if p2 == b {
				return nextSteps
			}
			visited[p2][cur.tp] = true
			queue = append(queue, State{p2, nextSteps, cur.tp})
		}

		// 3. 使用传送技能(跳到对面)
		if cur.tp == 0 && k >= 1 { // 还没用过,且 k >= 1
			p3 := (cur.pos + n/2) % n
			if !visited[p3][1] {
				if p3 == b {
					return nextSteps
				}
				visited[p3][1] = true
				queue = append(queue, State{p3, nextSteps, 1})
			}
		}
	}

	return -1
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, k, a, b, x, y int
	_, err := fmt.Fscan(reader, &n, &k, &a, &b, &x, &y)
	if err != nil {
		panic(err)
	}

	result := minSteps(n, k, a, b, x, y)
	fmt.Println(result)
}