#include <iostream>
using namespace std;
const int TAILLE_MAX = 500000;
int nbEquipes, tailleFile;
int idMaxG, idMaxD;
int vals[TAILLE_MAX];
int premOcc[TAILLE_MAX], dernOcc[TAILLE_MAX], occ[TAILLE_MAX];
void lire() {
cin >> nbEquipes >> tailleFile;
for (int i = 0; i < TAILLE_MAX; i++) premOcc[i]= -1, dernOcc[i] = -1;
for (int i = 0; i < tailleFile; i++) {
cin >> vals[i];
if (premOcc[vals[i]] == -1) premOcc[vals[i]] = i;
dernOcc[vals[i]] = i;
}
}
void trouveMax() {
for (int i = 0; i < TAILLE_MAX; i++) occ[i] = 0;
idMaxG = 0;
while (idMaxG < tailleFile && occ[vals[idMaxG]] == 0) {
occ[vals[idMaxG]] = 1;
idMaxG++;
}
for (int i = 0; i < TAILLE_MAX; i++) occ[i] = 0;
idMaxD = tailleFile - 1;
while (idMaxD >= 0 && occ[vals[idMaxD]] == 0) {
occ[vals[idMaxD]] = 1;
idMaxD--;
}
}
void testCoupes() {
for (int i = 0; i < TAILLE_MAX; i++) occ[i] = 0;
int scoreMax = 0, gMax = 0, dMax = tailleFile;
int idD = idMaxD;
for (int idG = 0; idG < idMaxG; idG++) {
occ[vals[idG]]++;
idD = max(idD, dernOcc[vals[idG]]);
while (idD < tailleFile) {
if (occ[vals[idD]] == 0) {
occ[vals[idD]]--;
idD++;
} else break;
}
if (idG + 1 + (tailleFile - idD) > scoreMax) {
scoreMax = idG + 1 + (tailleFile - idD);
gMax = idG + 1;
dMax = idD;
}
}
cout << gMax << ' ' << dMax - 1 << '\n';
}
int main() {
lire();
trouveMax();
testCoupes();
return 0;
}