#include<iostream>
#include<cstring>
using namespace std;
//题目要求:给出1~n的一个排列,
//统计该排列有多少个长度为奇数的连续子序列的中位数是b。
//思路:把b记为0,比b大的元素记为1,比b小的元素记为-1,
//一个连续区间内必须包含b,-1与1的个数必须相同
//一个数组,用位置表示b左侧元素的后缀和,值表示各数值个数
//1 4 2 5 3 7 6
int main(){
int n, b;
cin >> n >> b;
int num[n];
int pos; //记录b的位置
//把b记为0,比b大的元素记为1,比b小的元素记为-1
for(int i = 1; i <= n; i++){
cin >> num[i];
if(num[i] == b){
num[i] = 0;
pos = i;
}
else if(num[i] > b){
num[i] = 1;
}
else{
num[i] = -1;
}
}
int left_delta = 0; //记录b左侧的后缀和
int right_delta = 0; //记录b右侧的前缀和
int left[2*n+1]; //维护后缀和各值的个数
memset(left, 0, sizeof(left));//初始化记录后缀和值个数的数组,起初个数均为0
for(int i = pos-1; i >= 1; i--){
left_delta += num[i];
left[left_delta + n] ++; //因为存在负数,所以将数组平移(用每个数+n的位置表示该数的值),平移后再记录
}
int cnt = 1; // 记录总个数,初始值为1 (考虑b本身为一种序列)
int cnt0 = 0; //记录b右侧前缀和值为0的个数
for(int i = pos+1; i <= n; i++){
right_delta += num[i];
cnt += left[-right_delta + n]; //left[]数组中记录的与右侧非0前缀和互为相反数的数的个数即为该位置数可以组合的个数
if(right_delta == 0){
cnt0++;
}
}
cnt += cnt0 + left[n]; //对于前缀和与后缀和为0的情况
cout << cnt << endl;
}