#include<bits/stdc++.h> usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; const ll inf = 0x3f3f3f3f3f3f3f3f; const ll mod = 1e9 + 7; constint N = 1e6 + 10; int n, x; int a[N]; int l[N], r[N], vi[N], rr[N]; ll ans; vector<int>vc; intmain(){ scanf("%d%d", &n, &x); memset(l, 0x3f, sizeof(l)); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); l[a[i]] = min(l[a[i]], i); r[a[i]] = max(r[a[i]], i); } for (int i = 1; i <= x; i++)if (r[i] == 0)vi[i] = 1; if (r[1] == 0)l[1] = r[1] = 1; for (int i = 2; i <= x; i++) { if (r[i] == 0)l[i] = r[i] = r[i - 1]; } int L = 1, R = x; for (int i = 2; i <= x; i++) { if (l[i] >= r[i - 1])L = i; elsebreak; } if (vi[x])l[x] = r[x] = n; for (int i = x - 1; i >= 1; i--) { if (vi[i])l[i] = r[i] = l[i + 1]; } for (int i = x - 1; i >= 1; i--) { if (r[i] <= l[i + 1])R = i; elsebreak; } for (int i = R; i <= x; i++)vc.push_back(l[i]); if (vi[1])l[1] = r[1] = 1; for (int i = 2; i <= x; i++) { if (vi[i])r[i] = l[i] = r[i - 1]; } for (int i = 1; i <= L; i++) { auto p = lower_bound(vc.begin(), vc.end(), r[i]); if (p == vc.end())rr[i] = x + 1; else rr[i] = p - vc.begin() + R; } if (R == 1) { printf("%lld\n", 1ll * (x + 1)*x / 2); return0; } ans += x - R + 2; ans += L + 1; ans--; for (int i = 2; i <= min(L + 1, x - 1); i++) { int tmp = rr[i - 1] - 1; if (tmp < i)continue; ans += x - tmp; } printf("%lld\n", ans); return0; }