编程题
### 问题描述
小明喜欢玩一个叫转转转的游戏,这个游戏将给出 $N$ 张卡牌和一个模数 $M$,每张卡牌上面有一个正整数称为卡片的面值,开始时小明可以选择一个数值 $X$,然后将卡片中面值为 $X$ 或者为 $(X+1)\%M$ 的卡牌给抽走,抽走这张卡牌后,$X$ 值将变为抽走卡牌的面值。假设小明可以无限次根据上述规则抽取卡牌,小明应该如何选择初始 $X$ 值,使得进行若干次抽取后,剩余卡牌面值之和最小?请你给出剩余卡牌面值之和的最小值。
### 输入格式
输入包括两行,第一行两个正整数 $N$ 和 $M$,代表卡牌的数量。
第二行有 $N$ 个正整数,第 $i$ 个正整数 $a[i]$ 代表第 $i$ 张卡牌的面值。
### 输出格式
共一行,一个正整数 $Sum$, 代表进行若干次抽取后,剩余卡牌面值之和的最小值。
### 样例输入
```text
20 20
1 5 4 7 1 1 15 17 18 16 12 14 15 14 13 11 17 5 9 11
```
### 样例输出
```text
33
```
### 评测数据规模
对于所有评测数据,$1\leq N \leq 10^{5} $,$1\leq M \leq 10^{9} $,$1\leq a[i] \lt M $。