const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
  //只有0 1 2 3四种结果
    let n = parseInt(await readline());
    let result = 0;
    let line = await readline();
    let nums = line.trim().split(' ').map(item => parseInt(item));
    let max = Math.max(...nums), min = Math.min(...nums);
    if(max == nums[n-1] && min == nums[0]) {
        for(let i = 1i < ni++) { //如果最大值和最小值都在结果位置
            if(nums[i] < nums[i-1]) { //如果本来就是升序 则不用操作 即 0 否则就要操作一次 即 1
                console.log(1)
                return;
            }
        }
        console(0)
        return;

    } else ifmax !== nums[n-1] && min !== nums[0]) { //如果最大值和最小值都不在结果位置
        if(max == nums[0] && min == nums[n-1]) { //如果位置更好相反 则三次
            console.log(3)
            return;
        }else {
            console.log(2//否则操作三次
            return;
        }
    } else {
        console.log(1//如果最大值或者最小值恰好有一个在结果位置 则只需要操作一次
        return
    }
}()