সবার আগে ধরি, g=6 হচ্ছে Mএর প্রিমিটিভ রুট। প্রিমিটিভ রুট বের করতে সময় লাগে O(M))। সুতরাং সংজ্ঞানুযায়ী, আমরা শূণ্য নয় এমন কোন সংখ্যাকে g এর পাওয়ার এবং Mএর মডুলো আকারে প্রকাশ করতে পারি। আবারো ধরি, Fi≡gGi(modM). লক্ষণীয় যে, একটি নির্দিষ্ট মডMএর জন্য, এমন কোন k≤106 নাই যা Fk≡0(modM)শর্তটি পূরণ করে। সুতরাং আমাদের ০ নিয়ে চিন্তা করতে হবে না। সকল Gi যেখানে 0<i<M, কে O(M)এ হিসাব করে বের করা যাবে।
এখন ধরি, FlFr≡gGl⋅Fr(modM)।
তা হলে, আমাদের ইকুয়েশনটি দাঁড়ায়, P(k)≡l=1∏nr=l,MEX(l,r)=k∏ngGl⋅Fr(modM) অথবা, P(k)≡gl=1∑nr=l,MEX(l,r)=k∑nGl⋅Fr(modM)
সুতরাং, আমাদেরকে এই Gl⋅Frগুণফলগুলোর যোগফল নির্ণয় করতে হবে।
ধরি, ansk=i=k∑nP(k)। তা হলে আমরা ০ থেকে nএর মধ্যে সবগুলো k এর জন্য ansk এর মান বের করবো।
এখন left অ্যারেটি বানাতে হবে যেখানে, leftrr থেকে ছোট বা সমান রেঞ্জের সর্বোচ্চ ইনডেক্স যার প্রতিটা ইনডেক্স l≤leftrএর জন্য [l,r] পর্যন্ত সাব-অ্যারের MEX অবশ্যই ≥kহবে। MEX হচ্ছে সর্বনিম্ন অৠণাত্মক সংখ্যা যা এই সাব-অ্যারেতে অনুপস্থিত।
এখন আমরা ০ থেকে n এর মধ্যে সকল k এর জন্য left অ্যারেটি বের করি। k+১ এর জন্য অ্যারেটি বানানোর জন্য আমরা a তে k এর উপস্থিতি থাকলে সেটা দিয়ে left কে আপডেট করবো। এটার জন্য আমাদেরকে নিম্নবর্ণিত কাজ দুটি করতে হবে:
রেঞ্জ আপডেট যেমন (L,R) রেঞ্জ এবং ইন্টিজার x এর জন্য: lefti=min(lefti,x):L≤i≤R