To get first, last value from group there is no need for window function, just distinct select. I've assumed that each {appp, people} pair must be presented only once in results.
select distinct on (app,people)
app, people, login from tab
order by app, people, login desc
DB Fiddle
And example with LAST_VALUE
SELECT
app,
people,
LAST_VALUE(login) OVER (
PARTITION BY app, people
ORDER BY login ASC
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING)
FROM tab
When ORDER BY is used inside window function then window function run in "running sum" mode, knowing only about rows already processed inside partition. If we want to get information from whole partition then we must explicitly point that.
In this case, using MAX looks like better choice (as @lemon pointed)
SELECT
app,
people,
login,
MAX(login) OVER (PARTITION BY app, people)
FROM tab