You are given an integer sequence a_1, a_2, ..., a_n.

Find the number of pairs of indices (l, r) (1 ≤ l ≤ r ≤ n) such that the value of median of a_l, a_{l+1}, ..., a_r is exactly the given number m.

The median of a sequence is the value of an element which is in the middle of the sequence after sorting it in non-decreasing order. If the length of the sequence is even, the left of two middle elements is used.

For example, if a=[4, 2, 7, 5] then its median is 4 since after sorting the sequence, it will look like [2, 4, 5, 7] and the left of two middle elements is equal to 4. The median of [7, 1, 2, 9, 6] equals 6 since after sorting, the value 6 will be in the middle of the sequence.

Write a program to find the number of pairs of indices (l, r) (1 ≤ l ≤ r ≤ n) such that the value of median of a_l, a_{l+1}, ..., a_r is exactly the given number m.

Input

The first line contains integers n and m (1 ≤ n,m ≤ 2⋅10^5) — the length of the given sequence and the required value of the median.

The second line contains an integer sequence a_1, a_2, ..., a_n (1 ≤ a_i ≤ 2⋅10^5).

Output

Print the required number.

Examples

Input

5 4
1 4 5 60 4


Output

8


Input

3 1
1 1 1


Output

6


Input

15 2
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3


Output

97

Note

In the first example, the suitable pairs of indices are: (1, 3), (1, 4), (1, 5), (2, 2), (2, 3), (2, 5), (4, 5) and (5, 5).
import java.util.*;
import java.io.*;

public class Main {
	public static void main(String args[]) {new Main().run();}

	FastReader in = new FastReader();
	PrintWriter out = new PrintWriter(System.out);
	void run(){
		work();
		out.flush();
	}
	long mod=1000000007;
	long gcd(long a,long b) {
		return b==0?a:gcd(b,a%b);
	}
	void work() {
		int n=in.nextInt();
		int m=in.nextInt();
		int[] A=new int[n];
		for(int i=0;i<n;i++)A[i]=in.nextInt();
		out.println(solve(A,m)-solve(A,m+1));
	}
	private long solve(int[] A, int m) {
		int n=A.length;
		int[] B=new int[n];
		for(int i=0;i<n;i++) {
			if(A[i]>=m)B[i]=1;
			else {
				B[i]=-1;
			}
		}
		int[] sum=new int[n];
		for(int i=0;i<n;i++) {
			sum[i]=(i==0?0:sum[i-1])+B[i];
		}
		long ret=0;
		Node root=new Node();
		insert(root,-n-1,n+1,0);//范围-n+1,n+1
		for(int i=0;i<n;i++) {
			insert(root,-n-1,n+1,sum[i]);//不包括sum[i]
			ret+=find(root,-n-1,n+1,sum[i]-1);
		}
		return ret;
	}
	private long find(Node node, int l, int r, int v) {
		if(l==r) {
			return node.cnt;
		}
		int m=l+(r-l)/2;
		if(node.lNode==null)node.lNode=new Node();
		if(node.rNode==null)node.rNode=new Node();
		if(v<=m) {
			return find(node.lNode,l,m,v);
		}else{
			return node.lNode.cnt+find(node.rNode,m+1,r,v);
		}
	}
	private void insert(Node node, int l, int r, int v) {
		if(l==r) {
			node.cnt++;
			return;
		}
		if(node.lNode==null)node.lNode=new Node();
		if(node.rNode==null)node.rNode=new Node();
		int m=l+(r-l)/2;
		if(v<=m) {
			insert(node.lNode,l,m,v);
		}else {
			insert(node.rNode,m+1,r,v);
		}
		node.cnt=node.lNode.cnt+node.rNode.cnt;
	}
	class Node{
		Node lNode;
		Node rNode;
		int cnt;
	}
}



class FastReader
{
	BufferedReader br;
	StringTokenizer st;

	public FastReader()
	{
		br=new BufferedReader(new InputStreamReader(System.in));
	}

	public String next() 
	{
		if(st==null || !st.hasMoreElements())
		{
			try {
				st = new StringTokenizer(br.readLine());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return st.nextToken();
	}

	public int nextInt() 
	{
		return Integer.parseInt(next());
	}

	public long nextLong()
	{
		return Long.parseLong(next());
	}
}