#include <stdio.h>
#include <stack>
#include <algorithm>
#include <utility>
using namespace std;
const int MAXN = 1000005;
int seq[MAXN];
int height[MAXN];
int main()
{
#ifdef _LOCAL
freopen("F://input.txt", "r", stdin);
#endif
int n, MAX = -1, id = 0;
scanf("%d", &n);
for(int i = 0; i < n; ++i)
{
scanf("%d", &seq[i]);
if(seq[i] > MAX)
{
MAX = seq[i];
id = i;
}
}
for(int i = 0; i < n; ++i)
height[i] = seq[(id + i) % n];
long long int ans = 0;
stack<pair<int, int>> stk;
for(int i = 0; i < n ; ++i)
{
while(!stk.empty() && height[i] > stk.top().first)
{
ans += stk.top().second;
stk.pop();
}
if(stk.empty())
stk.push(make_pair(height[i], 1));
else if(height[i] < stk.top().first)
{
++ans;
stk.push(make_pair(height[i], 1));
}
else if(height[i] == stk.top().first)
{
if(stk.size() != 1) ++ans;
ans += stk.top().second;
++stk.top().second;
}
}
while(stk.size() > 2)
{
ans += stk.top().second;
stk.pop();
}
if(stk.size() == 2)
{
pair<int, int> temp = stk.top();
stk.pop();
if(stk.top().second > 1)
ans += temp.second;
}
printf("%I64d", ans);
return 0;
}