// 小红拿到了一个数组,她准备进行最多一次以下操作:
// 选择两个相等的元素,将这两个元素之间的所有元素删除。
// 小红想知道,她最多可以删除多少个元素?

// 1≤n≤200000
// 1≤ai≤10**9

// 相同元素的最大距离,遍历超时
// 记录每个元素的第一次下标和最后一次下标,计算最大差距
// 在读取数据的同时完成比较
// 通过哈希表来查找与存储, 哈希取mod 199999
// 我赌它不会有两个不同的元素哈希值一样

// 遍历dif,输出最大值。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct tmp
{
   int first;
};


int main() {
   int len;
   struct tmp arr[199999];
   int i;
   int max = 0;
   int dif = 0;
   int income = 0;

   // 获取数据
   scanf("%d", &len);
   memset(arr, 0, sizeof(struct tmp) * 199999);

   for (i = 1; i <= len; i++)
   {
      scanf("%d", &income);
      if (arr[income % 199999].first == 0)
      {
         arr[income % 199999].first = i;
      }
      else
      {
         dif = i - arr[income % 199999].first - 1;
         max = (max>dif)?max:dif;
      }
   }

   
   printf("%d", max);
   return 0;
}