穿过哈气之门
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在遥远的哈基米大陆上,矗立着一扇由哈气之力供能的哈气之门。这扇门维系着整个大陆的平衡,有 m 种哈气之力(哈、基、咪、南、北、绿、多等)。然而,随着时光流逝,哈气之门的力量逐渐衰弱,只有通过收集所有哈气之力的碎片才能重新激活阵法。

哈基米大陆上直线排布了 n 座城市,每座城市中蕴藏着一种碎片。这些碎片是重启哈气之门的关键,但每座城市只能提供一种元素的碎片。

作为哈气之塔的守护者,你需要找到所有可能的\textbf{连续城市区间},使得这些区间中\textbf{至少包含每一种}碎片。只有这样,才能激活哈气之力,重启哈气之门。

然而,元素碎片的分布并不均匀。有些城市重复蕴藏同一种元素,而有些元素却极为稀有。守护者必须精确计算出满足条件的区间数量,以确保阵法的稳定。

也就是说,给定 n 座城市和 m 种元素类型,每座城市对应一种元素类型(用数组T表示)。你需要计算所有满足以下条件的\textbf{区间数量}

条件:区间包含所有 m 种元素类型。

输入描述:

第一行输入两个整数 nm (1 \leq m \leq n \leq 10^5)。

第二行输入一个长度为 n 的数组 T ,其中T[i]表示第 i 座城市对应的元素类型(1 \leq T[i]\leq m)。

输出描述:

输出一行一个整数,表示满足条件的连续城市区间数量。
示例1

输入

复制
12 4
1 3 1 4 4 2 2 3 1 1 4 1

输出

复制
31