import sys from collections import defaultdict def main(): sys.setrecursionlimit(1 << 25) N, K = map(int, sys.stdin.readline().split()) A = list(map(int, sys.stdin.readline().split())) # Segment Tree Node class Node: __slots__ = ['l', 'r', 'left', 'right', 'min_val', 'count'] def __init__(self, l, r): self.l = l self.r = r self.left = None self.right = None self.min_val = 0 self.count = 0 # Build Segment Tree def build(l, r): node = Node(l, r) if l == r: node.min_val = A[l] node.count = 1 return node mid = (l + r) // 2 node.left = build(l, mid) node.right = build(mid+1, r) if node.left.min_val < node.right.min_val: node.min_val = node.left.min_val node.count = node.left.count elif node.right.min_val < node.left.min_val: node.min_val = node.right.min_val node.count = node.right.count else: node.min_val = node.left.min_val node.count = node.left.count + node.right.count return node root = build(0, N-1) # Query Segment Tree def query(node, l, r): if node.r < l or node.l > r: return (float('inf'), 0) if l <= node.l and node.r <= r: return (node.min_val, node.count) left_min, left_cnt = query(node.left, l, r) right_min, right_cnt = query(node.right, l, r) if left_min < right_min: return (left_min, left_cnt) elif right_min < left_min: return (right_min, right_cnt) else: return (left_min, left_cnt + right_cnt) # Precompute value to indices value_map = defaultdict(list) for idx, val in enumerate(A): value_map[val].append(idx) answer = 0 for i in range(N): target = K - A[i] if target not in value_map: continue for j in value_map[target]: if j < i: continue min_val, cnt = query(root, i, j) if cnt == 1: answer += (j - i + 1) print(answer) if __name__ == "__main__": main()