← Home
package main

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	scanner.Scan()
	n, _ := strconv.Atoi(scanner.Text())
	scanner.Scan()
	M, _ := strconv.ParseInt(scanner.Text(), 10, 64)

	a := make([]int64, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		a[i], _ = strconv.ParseInt(scanner.Text(), 10, 64)
	}

	d := make([]int64, n+1)
	if n > 0 {
		d[0] = a[0]
		for i := 1; i < n; i++ {
			d[i] = a[i] - a[i-1]
		}
		d[n] = M - a[n-1]
	}

	var original int64 = 0
	for i := 0; i <= n; i++ {
		if i%2 == 0 {
			original += d[i]
		}
	}

	suffixFlip := make([]int64, n+2)
	suffixFlip[n+1] = 0
	for i := n; i >= 0; i-- {
		if i%2 == 0 {
			suffixFlip[i] = suffixFlip[i+1] - d[i]
		} else {
			suffixFlip[i] = suffixFlip[i+1] + d[i]
		}
	}

	maxGain := int64(0)
	for i := 0; i <= n; i++ {
		if d[i] < 2 {
			continue
		}
		var gain int64
		if i%2 == 0 {
			gain = -1 + suffixFlip[i+1]
		} else {
			gain = (d[i] - 1) + suffixFlip[i+1]
		}
		if gain > maxGain {
			maxGain = gain
		}
	}

	fmt.Println(original + maxGain)
}