# pragma GCC target("avx2") # pragma GCC optimize("O3") # pragma GCC optimize("unroll-loops") #include #include // cout, endl, cin #include // string, to_string, stoi #include // vector #include // min, max, swap, sort, reverse, lower_bound, upper_bound #include // pair, make_pair #include // tuple, make_tuple #include // int64_t, int*_t #include // printf #include // map #include // queue, priority_queue #include // set #include // stack #include // deque #include // unordered_map #include // unordered_set #include // bitset #include // isupper, islower, isdigit, toupper, tolower #include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define repi(i, a, b) for (int i = (int)(a); i < (int)(b); i++) #define endl '\n' #define all(x) (x).begin(),(x).end() #define arr(x) (x).rbegin(),(x).rend() typedef long long ll; typedef unsigned long long ull; const ll inf=4e18; using graph = vector > ; using vi=vector; using P= pair; using pii=pair; using pll=pair; using vvi=vector; using vvvi=vector; using vll=vector; using vvll=vector; using vvvll=vector; using vp=vector

; using vvp=vector; using vvvp=vector; using vd=vector; using vvd =vector; //using vs=vector; //string T="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //string S="abcdefghijklmnopqrstuvwxyz"; //g++ main.cpp -std=c++17 -I . //cout < bool chmin(T& a, T b) { if (a > b) { a = b; return true; } else return false; } template bool chmax(T& a, T b) { if (a < b) { a = b; return true; } else return false; } struct edge{ int to; ll cost;int id; edge(int to,ll cost,int id) : to(to),cost(cost),id(id) {} }; using ve=vector; using vve=vector; int mod=998244353; using mint=modint998244353; using vm=vector; using vvm=vector; using vvvm=vector; constexpr int MAX = 10; ll fact[MAX],finv[MAX],invv[MAX]; void initcomb(){ fact[0]=fact[1]=1; finv[0]=finv[1]=1; invv[1]=1; for(int i=2;i par, siz; UnionFind(int n) : par(n, -1) , siz(n, 1) { } int root(int x) { if (par[x] == -1) return x; else return par[x] = root(par[x]); } bool issame(int x, int y) { return root(x) == root(y); } bool unite(int x, int y) { x = root(x), y = root(y); if (x == y) return false; if (siz[x] < siz[y]) swap(x, y); par[y] = x; siz[x] += siz[y]; return true; } int size(int x) { return siz[root(x)]; } }; std::ostream& operator<<(std::ostream& dest, __int128_t value) { std::ostream::sentry s(dest); if(s) { __uint128_t tmp = value < 0 ? -value : value; char buffer[128]; char* d = std::end(buffer); do { --d; *d = "0123456789"[tmp % 10]; tmp /= 10; } while(tmp != 0); if(value < 0) { --d; *d = '-'; } int len = std::end(buffer) - d; if(dest.rdbuf()->sputn(d, len) != len) { dest.setstate(std::ios_base::badbit); } } return dest; } __int128 parse(string& s) { __int128 ret = 0; for(int i = 0; i < s.length(); i++) if('0' <= s[i] && s[i] <= '9') ret = 10 * ret + s[i] - '0'; return ret; } /* int main() { string s = "187821878218782187821878218782"; __int128 x = parse(s); x *= 2; cout << x << endl; } */ using np=pair<__int128,__int128>; vll anss; void solve(int test){ int n,q; cin >> n >> q; vector p; { vi a(n); rep(i,n)cin >> a[i]; sort(all(a)); a.erase(unique(all(a)),a.end()); rep(i,a.size()){ if(p.size()==0 || p.back().second+1!=a[i]){ p.push_back(P(a[i],a[i])); } else { p.back().second=a[i]; } } } auto next=[&](vector p,__int128 m){ __int128 res=m; vector next; rep(i,p.size()-1){ if(res==0)break; __int128 d=p[i+1].first-1-p[i].second; __int128 ti=min(d,res); res-=ti; next.push_back(P(p[i].second+1,p[i].second+ti)); } if(res){ next.push_back(P(p.back().second+1,p.back().second+res)); } return next; }; { /* auto damp=p; rep(j,10){ cout <<"te "<< j+1 << endl; for(auto [l,r]:damp)cout << l << " " << r <> k >> x >> m; repi(i,1,k+1){ auto nextp=next(p,m); if(i>=2 && nextp.size()==p.size()){ int ti=k-i; __int128 bs=1ll*2*m*(ti/(2*p.size())); int rem=ti%(2*p.size()); { vector koho; rep(i,p.size()){ koho.push_back(p[i]); koho.push_back(nextp[i]); } bs+=koho[0].second; int id=1; rep(_,rem){ bs+=koho[id].second-koho[id].first+1; id=(id+1)%koho.size(); } vector nextpp; __int128 CNT=bs; rep(_,p.size()){ __int128 si=koho[id].second-koho[id].first+1; nextpp.push_back(make_pair(CNT+1,CNT+si)); CNT+=si; CNT+=koho[(id+1)%koho.size()].second; CNT-=koho[(id+1)%koho.size()].first; CNT+=1; id+=2; id%=koho.size(); } p=nextpp; } break; } else { p=nextp; } } { int cnt=0; __int128 ans=-1; rep(i,p.size()){ if(cnt+p[i].second-p[i].first+1>=x){ ans=p[i].first-1+x-cnt; break; } cnt+=p[i].second-p[i].first+1; } cout << ans%mod << endl; } } } //cat cf.cpp | pbcopy //g++ cf.cpp -std=c++17 -I . int main(){cin.tie(0);ios::sync_with_stdio(false); //initcomb(); int t=1;//cin >>t; rep(test,t)solve(test); for(auto ans:anss){ cout<< ans << endl; } }